/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

#include <iostream>
#include <vector>
#include "gtest/gtest.h"
#include "storage/format/orc/rle.h"

#define ARRAY_SIZE(array) (sizeof(array) / sizeof(*array))
namespace orc {

std::vector<int64_t> decodeRLEv2(const unsigned char* bytes, uint32_t l,
                                 size_t n, size_t count,
                                 const char* notNull = nullptr) {
  std::unique_ptr<RleDecoder> rle =
      createRleDecoder(std::unique_ptr<SeekableInputStream>(
                           new SeekableArrayInputStream(bytes, l)),
                       true, RleVersion_2, *dbcommon::getDefaultPool());
  std::vector<int64_t> results;
  for (size_t i = 0; i < count; i += n) {
    size_t remaining = count - i;
    size_t nread = std::min(n, remaining);
    std::vector<int64_t> data(nread);
    rle->next(data.data(), nread, notNull);
    if (notNull) {
      notNull += nread;
    }
    results.insert(results.end(), data.begin(), data.end());
  }

  return results;
}

void checkResults(const std::vector<int64_t>& e, const std::vector<int64_t>& a,
                  size_t n, const char* notNull = nullptr) {
  EXPECT_EQ(e.size(), a.size()) << "vectors differ in size";
  for (size_t i = 0; i < e.size(); ++i) {
    if (!notNull || notNull[i]) {
      EXPECT_EQ(e[i], a[i]) << "Output wrong at " << i << ", n=" << n;
    }
  }
}

TEST(RLEv2, basicDelta0) {
  const size_t count = 20;
  std::vector<int64_t> values;
  for (size_t i = 0; i < count; ++i) {
    values.push_back(static_cast<int64_t>(i));
  }

  const unsigned char bytes[] = {0xc0, 0x13, 0x00, 0x02};
  uint32_t l = sizeof(bytes) / sizeof(char);
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, count), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, count), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, count), 7);
  checkResults(values, decodeRLEv2(bytes, l, count, count), count);
}

TEST(RLEv2, basicDelta1) {
  std::vector<int64_t> values(5);
  values[0] = -500;
  values[1] = -400;
  values[2] = -350;
  values[3] = -325;
  values[4] = -310;

  const unsigned char bytes[] = {0xce, 0x04, 0xe7, 0x07, 0xc8,
                                 0x01, 0x32, 0x19, 0x0f};
  uint32_t l = sizeof(bytes) / sizeof(char);
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
  checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
               values.size());
}

TEST(RLEv2, basicDelta2) {
  std::vector<int64_t> values(5);
  values[0] = -500;
  values[1] = -600;
  values[2] = -650;
  values[3] = -675;
  values[4] = -710;

  const unsigned char bytes[] = {0xce, 0x04, 0xe7, 0x07, 0xc7,
                                 0x01, 0x32, 0x19, 0x23};
  uint32_t l = sizeof(bytes) / sizeof(char);
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
  checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
               values.size());
}

TEST(RLEv2, basicDelta3) {
  std::vector<int64_t> values(5);
  values[0] = 500;
  values[1] = 400;
  values[2] = 350;
  values[3] = 325;
  values[4] = 310;

  const unsigned char bytes[] = {0xce, 0x04, 0xe8, 0x07, 0xc7,
                                 0x01, 0x32, 0x19, 0x0f};
  uint32_t l = sizeof(bytes) / sizeof(char);
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
  checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
               values.size());
}

TEST(RLEv2, basicDelta4) {
  std::vector<int64_t> values(5);
  values[0] = 500;
  values[1] = 600;
  values[2] = 650;
  values[3] = 675;
  values[4] = 710;

  const unsigned char bytes[] = {0xce, 0x04, 0xe8, 0x07, 0xc8,
                                 0x01, 0x32, 0x19, 0x23};
  uint32_t l = sizeof(bytes) / sizeof(char);
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
  checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
               values.size());
}

TEST(RLEv2, delta0Width) {
  const unsigned char buffer[] = {0x4e, 0x2, 0x0,  0x1, 0x2,
                                  0xc0, 0x2, 0x42, 0x0};
  std::unique_ptr<RleDecoder> decoder = createRleDecoder(
      std::unique_ptr<SeekableInputStream>(
          new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer))),
      false, RleVersion_2, *dbcommon::getDefaultPool());
  int64_t values[6];
  decoder->next(values, 6, 0);
  EXPECT_EQ(0, values[0]);
  EXPECT_EQ(1, values[1]);
  EXPECT_EQ(2, values[2]);
  EXPECT_EQ(0x42, values[3]);
  EXPECT_EQ(0x42, values[4]);
  EXPECT_EQ(0x42, values[5]);
}

TEST(RLEv2, basicDelta0WithNulls) {
  std::vector<int64_t> values;
  std::vector<char> notNull;
  for (size_t i = 0; i < 20; ++i) {
    values.push_back(static_cast<int64_t>(i));
    notNull.push_back(true);
    // throw in a null every third value
    bool addNull = (i % 3 == 0);
    if (addNull) {
      values.push_back(-1);
      notNull.push_back(false);
    }
  }

  const unsigned char bytes[] = {0xc0, 0x13, 0x00, 0x02};
  uint32_t l = sizeof(bytes) / sizeof(char);
  const size_t count = values.size();
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, count, notNull.data()), 1,
               notNull.data());
  checkResults(values, decodeRLEv2(bytes, l, 3, count, notNull.data()), 3,
               notNull.data());
  checkResults(values, decodeRLEv2(bytes, l, 7, count, notNull.data()), 7,
               notNull.data());
  checkResults(values, decodeRLEv2(bytes, l, count, count, notNull.data()),
               count, notNull.data());
}

TEST(RLEv2, shortRepeats) {
  const size_t runLength = 7;
  const size_t nVals = 10;
  const size_t count = nVals * runLength;
  std::vector<int64_t> values;
  for (size_t i = 0; i < nVals; ++i) {
    for (size_t j = 0; j < runLength; ++j) {
      values.push_back(static_cast<int64_t>(i));
    }
  }

  const unsigned char bytes[] = {0x04, 0x00, 0x04, 0x02, 0x04, 0x04, 0x04,
                                 0x06, 0x04, 0x08, 0x04, 0x0a, 0x04, 0x0c,
                                 0x04, 0x0e, 0x04, 0x10, 0x04, 0x12};
  uint32_t l = sizeof(bytes) / sizeof(char);
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, count), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, count), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, count), 7);
  checkResults(values, decodeRLEv2(bytes, l, count, count), count);
}

TEST(RLEv2, multiByteShortRepeats) {
  const size_t runLength = 7;
  const size_t nVals = 3;
  const size_t count = nVals * runLength;
  std::vector<int64_t> values;
  for (size_t i = 0; i < nVals; ++i) {
    for (size_t j = 0; j < runLength; ++j) {
      values.push_back(static_cast<int64_t>(i) + (1LL << 62));
    }
  }

  const unsigned char bytes[] = {0x3c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
                                 0x00, 0x00, 0x3c, 0x80, 0x00, 0x00, 0x00,
                                 0x00, 0x00, 0x00, 0x02, 0x3c, 0x80, 0x00,
                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x04};
  uint32_t l = sizeof(bytes) / sizeof(char);
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, count), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, count), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, count), 7);
  checkResults(values, decodeRLEv2(bytes, l, count, count), count);
}

TEST(RLEv2, 0to2Repeat1Direct) {
  const unsigned char buffer[] = {0x46, 0x02, 0x02, 0x40};
  std::unique_ptr<RleDecoder> rle = createRleDecoder(
      std::unique_ptr<SeekableInputStream>(
          new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer))),
      true, RleVersion_2, *dbcommon::getDefaultPool());
  std::vector<int64_t> data(3);
  rle->next(data.data(), 3, nullptr);

  for (size_t i = 0; i < data.size(); ++i) {
    EXPECT_EQ(i, data[i]) << "Output wrong at " << i;
  }
}

TEST(RLEv2, bitSize2Direct) {
  // 0,1 repeated 10 times (signed ints)
  const size_t count = 20;
  std::vector<int64_t> values;
  for (size_t i = 0; i < count; ++i) {
    values.push_back(i % 2);
  }

  const unsigned char bytes[] = {0x42, 0x13, 0x22, 0x22, 0x22, 0x22, 0x22};
  uint32_t l = sizeof(bytes) / sizeof(char);
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, count), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, count), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, count), 7);
  checkResults(values, decodeRLEv2(bytes, l, count, count), count);
}

TEST(RLEv2, bitSize4Direct) {
  // 0,2 repeated 10 times (signed ints)
  const size_t count = 20;
  std::vector<int64_t> values;
  for (size_t i = 0; i < count; ++i) {
    values.push_back((i % 2) * 2);
  }

  const unsigned char bytes[] = {0x46, 0x13, 0x04, 0x04, 0x04, 0x04,
                                 0x04, 0x04, 0x04, 0x04, 0x04, 0x04};
  uint32_t l = sizeof(bytes) / sizeof(char);

  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, count), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, count), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, count), 7);
  checkResults(values, decodeRLEv2(bytes, l, count, count), count);
}

TEST(RLEv2, multipleRunsDirect) {
  std::vector<int64_t> values;
  // 0,1 repeated 10 times (signed ints)
  for (size_t i = 0; i < 20; ++i) {
    values.push_back(i % 2);
  }
  // 0,2 repeated 10 times (signed ints)
  for (size_t i = 0; i < 20; ++i) {
    values.push_back((i % 2) * 2);
  }

  const unsigned char bytes[] = {0x42, 0x13, 0x22, 0x22, 0x22, 0x22, 0x22,
                                 0x46, 0x13, 0x04, 0x04, 0x04, 0x04, 0x04,
                                 0x04, 0x04, 0x04, 0x04, 0x04};
  uint32_t l = sizeof(bytes) / sizeof(char);

  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
  checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
               values.size());
}

TEST(RLEv2, largeNegativesDirect) {
  const unsigned char buffer[] = {
      0x7e, 0x04, 0xcf, 0xca, 0xcc, 0x91, 0xba, 0x38, 0x93, 0xab, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x02, 0x99, 0xa5, 0xcc, 0x28, 0x03, 0xf7, 0xe0, 0xff};
  std::unique_ptr<RleDecoder> rle = createRleDecoder(
      std::unique_ptr<SeekableInputStream>(
          new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer))),
      true, RleVersion_2, *dbcommon::getDefaultPool());
  std::vector<int64_t> data(5);
  rle->next(data.data(), 5, nullptr);

  EXPECT_EQ(-7486502418706614742, data[0]) << "Output wrong at " << 0;
  EXPECT_EQ(0, data[1]) << "Output wrong at " << 1;
  EXPECT_EQ(1, data[2]) << "Output wrong at " << 2;
  EXPECT_EQ(1, data[3]) << "Output wrong at " << 3;
  EXPECT_EQ(-5535739865598783616, data[4]) << "Output wrong at " << 4;
}

TEST(RLEv2, overflowDirect) {
  std::vector<int64_t> values(4);
  values[0] = 4513343538618202719l;
  values[1] = 4513343538618202711l;
  values[2] = 2911390882471569739l;
  values[3] = -9181829309989854913l;

  const unsigned char bytes[] = {
      0x7e, 0x03, 0x7d, 0x45, 0x3c, 0x12, 0x41, 0x48, 0xf4, 0xbe, 0x7d, 0x45,
      0x3c, 0x12, 0x41, 0x48, 0xf4, 0xae, 0x50, 0xce, 0xad, 0x2a, 0x30, 0x0e,
      0xd2, 0x96, 0xfe, 0xd8, 0xd2, 0x38, 0x54, 0x6e, 0x3d, 0x81};
  uint32_t l = sizeof(bytes) / sizeof(char);
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
  checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
               values.size());
}

TEST(RLEv2, basicPatched0) {
  int32_t v[] = {2030, 2000, 2020, 1000000, 2040, 2050, 2060, 2070, 2080, 2090};
  std::vector<int64_t> values;
  for (size_t i = 0; i < sizeof(v) / sizeof(int32_t); ++i) {
    values.push_back(v[i]);
  }

  const unsigned char bytes[] = {0x8e, 0x09, 0x2b, 0x21, 0x07, 0xd0,
                                 0x1e, 0x00, 0x14, 0x70, 0x28, 0x32,
                                 0x3c, 0x46, 0x50, 0x5a, 0xfc, 0xe8};
  uint32_t l = sizeof(bytes) / sizeof(char);
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
  checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
               values.size());
}

TEST(RLEv2, basicPatched1) {
  int32_t v[] = {20, 2,   3,    2,   1,  3, 17,  71,  35, 2,   1,    139,   2,
                 2,  3,   1783, 475, 2,  1, 1,   3,   1,  3,   2,    32,    1,
                 2,  3,   1,    8,   30, 1, 3,   414, 1,  1,   135,  3,     3,
                 1,  414, 2,    1,   2,  2, 594, 2,   5,  6,   4,    11,    1,
                 2,  2,   1,    1,   52, 4, 1,   2,   7,  1,   17,   334,   1,
                 2,  1,   2,    2,   6,  1, 266, 1,   2,  217, 2,    6,     2,
                 13, 2,   2,    1,   2,  3, 5,   1,   2,  1,   7244, 11813, 1,
                 33, 2,   -13,  1,   2,  3, 13,  1,   92, 3,   13,   5,     14,
                 9,  141, 12,   6,   15, 25};
  std::vector<int64_t> values;
  for (size_t i = 0; i < sizeof(v) / sizeof(int32_t); ++i) {
    values.push_back(v[i]);
  }

  const unsigned char bytes[] = {
      0x90, 0x6d, 0x04, 0xa4, 0x8d, 0x10, 0x83, 0xc2, 0x00, 0xf0, 0x70, 0x40,
      0x3c, 0x54, 0x18, 0x03, 0xc1, 0xc9, 0x80, 0x78, 0x3c, 0x21, 0x04, 0xf4,
      0x03, 0xc1, 0xc0, 0xe0, 0x80, 0x38, 0x20, 0x0f, 0x16, 0x83, 0x81, 0xe1,
      0x00, 0x70, 0x54, 0x56, 0x0e, 0x08, 0x6a, 0xc1, 0xc0, 0xe4, 0xa0, 0x40,
      0x20, 0x0e, 0xd5, 0x83, 0xc1, 0xc0, 0xf0, 0x79, 0x7c, 0x1e, 0x12, 0x09,
      0x84, 0x43, 0x00, 0xe0, 0x78, 0x3c, 0x1c, 0x0e, 0x20, 0x84, 0x41, 0xc0,
      0xf0, 0xa0, 0x38, 0x3d, 0x5b, 0x07, 0x03, 0xc1, 0xc0, 0xf0, 0x78, 0x4c,
      0x1d, 0x17, 0x07, 0x03, 0xdc, 0xc0, 0xf0, 0x98, 0x3c, 0x34, 0x0f, 0x07,
      0x83, 0x81, 0xe1, 0x00, 0x90, 0x38, 0x1e, 0x0e, 0x2c, 0x8c, 0x81, 0xc2,
      0xe0, 0x78, 0x00, 0x1c, 0x0f, 0x08, 0x06, 0x81, 0xc6, 0x90, 0x80, 0x68,
      0x24, 0x1b, 0x0b, 0x26, 0x83, 0x21, 0x30, 0xe0, 0x98, 0x3c, 0x6f, 0x06,
      0xb7, 0x03, 0x70};
  uint32_t l = sizeof(bytes) / sizeof(char);
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
  checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
               values.size());
}

TEST(RLEv2, mixedPatchedAndShortRepeats) {
  int32_t v[] = {20,  2,  3,   2,    1,    3,     17, 71,   35, 2,    1,  139,
                 2,   2,  3,   1783, 475,  2,     1,  1,    3,  1,    3,  2,
                 32,  1,  2,   3,    1,    8,     30, 1,    3,  414,  1,  1,
                 135, 3,  3,   1,    414,  2,     1,  2,    2,  594,  2,  5,
                 6,   4,  11,  1,    2,    2,     1,  1,    52, 4,    1,  2,
                 7,   1,  17,  334,  1,    2,     1,  2,    2,  6,    1,  266,
                 1,   2,  217, 2,    6,    2,     13, 2,    2,  1,    2,  3,
                 5,   1,  2,   1,    7244, 11813, 1,  33,   2,  -13,  1,  2,
                 3,   13, 1,   92,   3,    13,    5,  14,   9,  141,  12, 6,
                 15,  25, 1,   1,    1,    46,    2,  1,    1,  141,  3,  1,
                 1,   1,  1,   2,    1,    4,     34, 5,    78, 8,    1,  2,
                 2,   1,  9,   10,   2,    1,     4,  13,   1,  5,    4,  4,
                 19,  5,  1,   1,    1,    68,    33, 399,  1,  1885, 25, 5,
                 2,   4,  1,   1,    2,    16,    1,  2966, 3,  1,    1,  25501,
                 1,   1,  1,   66,   1,    3,     8,  131,  14, 5,    1,  2,
                 2,   1,  1,   8,    1,    1,     2,  1,    5,  9,    2,  3,
                 112, 13, 2,   2,    1,    5,     10, 3,    1,  1,    13, 2,
                 3,   4,  1,   3,    1,    1,     2,  1,    1,  2,    4,  2,
                 207, 1,  1,   2,    4,    3,     3,  2,    2,  16};
  std::vector<int64_t> values;
  for (size_t i = 0; i < sizeof(v) / sizeof(int32_t); ++i) {
    values.push_back(v[i]);
  }

  const unsigned char bytes[] = {
      0x90, 0x6d, 0x04, 0xa4, 0x8d, 0x10, 0x83, 0xc2, 0x00, 0xf0, 0x70, 0x40,
      0x3c, 0x54, 0x18, 0x03, 0xc1, 0xc9, 0x80, 0x78, 0x3c, 0x21, 0x04, 0xf4,
      0x03, 0xc1, 0xc0, 0xe0, 0x80, 0x38, 0x20, 0x0f, 0x16, 0x83, 0x81, 0xe1,
      0x00, 0x70, 0x54, 0x56, 0x0e, 0x08, 0x6a, 0xc1, 0xc0, 0xe4, 0xa0, 0x40,
      0x20, 0x0e, 0xd5, 0x83, 0xc1, 0xc0, 0xf0, 0x79, 0x7c, 0x1e, 0x12, 0x09,
      0x84, 0x43, 0x00, 0xe0, 0x78, 0x3c, 0x1c, 0x0e, 0x20, 0x84, 0x41, 0xc0,
      0xf0, 0xa0, 0x38, 0x3d, 0x5b, 0x07, 0x03, 0xc1, 0xc0, 0xf0, 0x78, 0x4c,
      0x1d, 0x17, 0x07, 0x03, 0xdc, 0xc0, 0xf0, 0x98, 0x3c, 0x34, 0x0f, 0x07,
      0x83, 0x81, 0xe1, 0x00, 0x90, 0x38, 0x1e, 0x0e, 0x2c, 0x8c, 0x81, 0xc2,
      0xe0, 0x78, 0x00, 0x1c, 0x0f, 0x08, 0x06, 0x81, 0xc6, 0x90, 0x80, 0x68,
      0x24, 0x1b, 0x0b, 0x26, 0x83, 0x21, 0x30, 0xe0, 0x98, 0x3c, 0x6f, 0x06,
      0xb7, 0x03, 0x70, 0x00, 0x02, 0x5e, 0x05, 0x00, 0x5c, 0x00, 0x04, 0x00,
      0x02, 0x00, 0x02, 0x01, 0x1a, 0x00, 0x06, 0x01, 0x02, 0x8a, 0x16, 0x00,
      0x41, 0x01, 0x04, 0x00, 0xe1, 0x10, 0xd1, 0xc0, 0x04, 0x10, 0x08, 0x24,
      0x10, 0x03, 0x30, 0x01, 0x03, 0x0d, 0x21, 0x00, 0xb0, 0x00, 0x02, 0x5e,
      0x12, 0x00, 0x88, 0x00, 0x42, 0x03, 0x1e, 0x00, 0x02, 0x0e, 0xba, 0x00,
      0x32, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x08, 0x00, 0x02, 0x00, 0x02, 0x00,
      0x04, 0x00, 0x20, 0x00, 0x02, 0x17, 0x2c, 0x00, 0x06, 0x00, 0x02, 0x00,
      0x02, 0xc7, 0x3a, 0x00, 0x02, 0x8c, 0x36, 0x00, 0xa2, 0x01, 0x82, 0x00,
      0x10, 0x70, 0x43, 0x42, 0x00, 0x02, 0x04, 0x00, 0x00, 0xe0, 0x00, 0x01,
      0x00, 0x10, 0x40, 0x10, 0x5b, 0xc6, 0x01, 0x02, 0x00, 0x20, 0x90, 0x40,
      0x00, 0x0c, 0x02, 0x08, 0x18, 0x00, 0x40, 0x00, 0x01, 0x00, 0x00, 0x08,
      0x30, 0x33, 0x80, 0x00, 0x02, 0x0c, 0x10, 0x20, 0x20, 0x47, 0x80, 0x13,
      0x4c};
  uint32_t l = sizeof(bytes) / sizeof(char);
  // Read 1 at a time, then 3 at a time, etc.
  checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
  checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
  checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
  checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
               values.size());
}

TEST(RLEv2, basicDirectSeek) {
  // 0,1 repeated 10 times (signed ints) followed by
  // 0,2 repeated 10 times (signed ints)
  const unsigned char bytes[] = {0x42, 0x13, 0x22, 0x22, 0x22, 0x22, 0x22,
                                 0x46, 0x13, 0x04, 0x04, 0x04, 0x04, 0x04,
                                 0x04, 0x04, 0x04, 0x04, 0x04};
  uint32_t l = sizeof(bytes) / sizeof(char);

  std::unique_ptr<RleDecoder> rle =
      createRleDecoder(std::unique_ptr<SeekableInputStream>(
                           new SeekableArrayInputStream(bytes, l)),
                       true, RleVersion_2, *dbcommon::getDefaultPool());
  std::list<uint64_t> position;
  position.push_back(7);   // byte position; skip first 20 [0 to 19]
  position.push_back(13);  // value position; skip 13 more [20 to 32]

  PositionProvider location(position);
  rle->seek(location);
  std::vector<int64_t> data(3);
  rle->next(data.data(), 3, nullptr);
  EXPECT_EQ(2, data[0]);
  EXPECT_EQ(0, data[1]);
  EXPECT_EQ(2, data[2]);
  rle->next(data.data(), 3, nullptr);
  EXPECT_EQ(0, data[0]);
  EXPECT_EQ(2, data[1]);
  EXPECT_EQ(0, data[2]);
  rle->next(data.data(), 1, nullptr);
  EXPECT_EQ(2, data[0]);
}

TEST(RLEv2, bitsLeftByPreviousStream) {
  // test for #109
  // 118 DIRECT values, followed by PATHCED values
  const unsigned char bytes[] = {
      0x5a, 0x75, 0x92, 0x42, 0x49, 0x09, 0x2b, 0xa4, 0xae, 0x92, 0xc2, 0x4b,
      0x89, 0x2f, 0x24, 0xbc, 0x93, 0x2a, 0x4c, 0xa9, 0x34, 0x24, 0xe0, 0x93,
      0x92, 0x4e, 0xe9, 0x40, 0xa5, 0x04, 0x94, 0x12, 0x62, 0xa9, 0xc9, 0xa7,
      0x26, 0x9c, 0xaa, 0x73, 0x09, 0xcd, 0x27, 0x34, 0x9c, 0xf2, 0x74, 0x49,
      0xd3, 0x27, 0x50, 0x9d, 0x42, 0x75, 0x29, 0xd4, 0xa7, 0x5a, 0x9d, 0xaa,
      0x79, 0x89, 0xe9, 0x27, 0xa4, 0x9e, 0xea, 0x7c, 0x29, 0xf6, 0x27, 0xdc,
      0x9f, 0xb2, 0x7f, 0x4a, 0x00, 0xa8, 0x14, 0xa0, 0x72, 0x82, 0x8a, 0x19,
      0x28, 0x6e, 0xa2, 0x52, 0x89, 0x4a, 0x28, 0x28, 0xa6, 0xa2, 0x9a, 0x8b,
      0x6a, 0x2d, 0xa8, 0xb8, 0xa2, 0xe2, 0x8b, 0xaa, 0x53, 0xa9, 0x54, 0xa5,
      0x92, 0x98, 0x6a, 0x62, 0xa9, 0x9c, 0xa6, 0x8a, 0x9b, 0xea, 0x70, 0x29,
      0xd2, 0xa7, 0x52, 0x9d, 0x4a, 0x77, 0x29, 0xe0, 0xa7, 0xa2, 0x9e, 0xaa,
      0x7b, 0x29, 0xf0, 0xa7, 0xd2, 0xa0, 0x0a, 0x84, 0x2a, 0x18, 0xa8, 0x72,
      0xa1, 0xca, 0x89, 0x2a, 0x30, 0xa9, 0x4a, 0xa5, 0x4a, 0x96, 0x2a, 0xae,
      0xab, 0x02, 0xac, 0x2b, 0x8d, 0x2e, 0x60, 0xb9, 0x82, 0xe7, 0x2b, 0x9f,
      0xae, 0x84, 0xba, 0x52, 0xe9, 0xeb, 0xad, 0x2e, 0xb6, 0xbc, 0x32, 0xf1,
      0xcb, 0xcc, 0x2f, 0x42, 0xbd, 0x8a, 0xf7, 0xcb, 0xe1, 0xaf, 0xa4, 0xbe,
      0x9a, 0xfa, 0x6b, 0xeb, 0xaf, 0xba, 0xbe, 0xea, 0xfd, 0x2b, 0xf4, 0xaf,
      0xd8, 0xbf, 0xfb, 0x00,
      0x80,  // <= end of DIRECT, start of PATCHED =>
      0x90, 0x6d, 0x04, 0xa4, 0x8d, 0x10, 0x83, 0xc2, 0x00, 0xf0, 0x70, 0x40,
      0x3c, 0x54, 0x18, 0x03, 0xc1, 0xc9, 0x80, 0x78, 0x3c, 0x21, 0x04, 0xf4,
      0x03, 0xc1, 0xc0, 0xe0, 0x80, 0x38, 0x20, 0x0f, 0x16, 0x83, 0x81, 0xe1,
      0x00, 0x70, 0x54, 0x56, 0x0e, 0x08, 0x6a, 0xc1, 0xc0, 0xe4, 0xa0, 0x40,
      0x20, 0x0e, 0xd5, 0x83, 0xc1, 0xc0, 0xf0, 0x79, 0x7c, 0x1e, 0x12, 0x09,
      0x84, 0x43, 0x00, 0xe0, 0x78, 0x3c, 0x1c, 0x0e, 0x20, 0x84, 0x41, 0xc0,
      0xf0, 0xa0, 0x38, 0x3d, 0x5b, 0x07, 0x03, 0xc1, 0xc0, 0xf0, 0x78, 0x4c,
      0x1d, 0x17, 0x07, 0x03, 0xdc, 0xc0, 0xf0, 0x98, 0x3c, 0x34, 0x0f, 0x07,
      0x83, 0x81, 0xe1, 0x00, 0x90, 0x38, 0x1e, 0x0e, 0x2c, 0x8c, 0x81, 0xc2,
      0xe0, 0x78, 0x00, 0x1c, 0x0f, 0x08, 0x06, 0x81, 0xc6, 0x90, 0x80, 0x68,
      0x24, 0x1b, 0x0b, 0x26, 0x83, 0x21, 0x30, 0xe0, 0x98, 0x3c, 0x6f, 0x06,
      0xb7, 0x03, 0x70};
  uint32_t l = sizeof(bytes) / sizeof(unsigned char);

  // PATCHED values.
  int32_t v[] = {20, 2,   3,    2,   1,  3, 17,  71,  35, 2,   1,    139,   2,
                 2,  3,   1783, 475, 2,  1, 1,   3,   1,  3,   2,    32,    1,
                 2,  3,   1,    8,   30, 1, 3,   414, 1,  1,   135,  3,     3,
                 1,  414, 2,    1,   2,  2, 594, 2,   5,  6,   4,    11,    1,
                 2,  2,   1,    1,   52, 4, 1,   2,   7,  1,   17,   334,   1,
                 2,  1,   2,    2,   6,  1, 266, 1,   2,  217, 2,    6,     2,
                 13, 2,   2,    1,   2,  3, 5,   1,   2,  1,   7244, 11813, 1,
                 33, 2,   -13,  1,   2,  3, 13,  1,   92, 3,   13,   5,     14,
                 9,  141, 12,   6,   15, 25};
  uint32_t D = 118, P = sizeof(v) / sizeof(int32_t), N = D + P;

  std::unique_ptr<RleDecoder> rle =
      createRleDecoder(std::unique_ptr<SeekableInputStream>(
                           new SeekableArrayInputStream(bytes, l)),
                       true, RleVersion_2, *dbcommon::getDefaultPool());

  std::vector<int64_t> data(N);
  rle->next(data.data(), N, nullptr);
  // check patched values
  for (size_t i = 0; i < P; ++i) {
    EXPECT_EQ(v[i], data[i + D]);
  }
}

TEST(RLEv1, simpleTest) {
  const unsigned char buffer[] = {0x61, 0xff, 0x64, 0xfb, 0x02,
                                  0x03, 0x5,  0x7,  0xb};
  std::unique_ptr<RleDecoder> rle = createRleDecoder(
      std::unique_ptr<SeekableInputStream>(
          new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer))),
      false, RleVersion_1, *dbcommon::getDefaultPool());
  std::vector<int64_t> data(105);
  rle->next(data.data(), 105, nullptr);

  for (size_t i = 0; i < 100; ++i) {
    EXPECT_EQ(100 - i, data[i]) << "Output wrong at " << i;
  }
  EXPECT_EQ(2, data[100]);
  EXPECT_EQ(3, data[101]);
  EXPECT_EQ(5, data[102]);
  EXPECT_EQ(7, data[103]);
  EXPECT_EQ(11, data[104]);
}

TEST(RLEv1, signedNullLiteralTest) {
  const unsigned char buffer[] = {0xf8, 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7};
  std::unique_ptr<RleDecoder> rle = createRleDecoder(
      std::unique_ptr<SeekableInputStream>(
          new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer))),
      true, RleVersion_1, *dbcommon::getDefaultPool());
  std::vector<int64_t> data(8);
  std::vector<char> notNull(8, 1);
  rle->next(data.data(), 8, notNull.data());

  for (size_t i = 0; i < 8; ++i) {
    EXPECT_EQ(i % 2 == 0 ? i / 2 : -((i + 1) / 2), data[i]);
  }
}

TEST(RLEv1, splitHeader) {
  const unsigned char buffer[] = {0x0, 0x00, 0xdc, 0xba, 0x98, 0x76};
  std::unique_ptr<RleDecoder> rle = createRleDecoder(
      std::unique_ptr<SeekableInputStream>(
          new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer), 4)),
      false, RleVersion_1, *dbcommon::getDefaultPool());
  std::vector<int64_t> data(200);
  rle->next(data.data(), 3, nullptr);

  for (size_t i = 0; i < 3; ++i) {
    EXPECT_EQ(247864668, data[i]) << "Output wrong at " << i;
  }
}

TEST(RLEv1, splitRuns) {
  const unsigned char buffer[] = {0x7d, 0x01, 0xff, 0x01, 0xfb,
                                  0x01, 0x02, 0x03, 0x04, 0x05};
  SeekableInputStream* const stream =
      new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer));
  std::unique_ptr<RleDecoder> rle =
      createRleDecoder(std::unique_ptr<SeekableInputStream>(stream), false,
                       RleVersion_1, *dbcommon::getDefaultPool());
  std::vector<int64_t> data(200);
  for (size_t i = 0; i < 42; ++i) {
    rle->next(data.data(), 3, nullptr);
    for (size_t j = 0; j < 3; ++j) {
      EXPECT_EQ(255 + i * 3 + j, data[j])
          << "Wrong output at " << i << ", " << j;
    }
  }
  rle->next(data.data(), 3, nullptr);
  EXPECT_EQ(381, data[0]);
  EXPECT_EQ(382, data[1]);
  EXPECT_EQ(1, data[2]);
  rle->next(data.data(), 3, nullptr);
  EXPECT_EQ(2, data[0]);
  EXPECT_EQ(3, data[1]);
  EXPECT_EQ(4, data[2]);
  rle->next(data.data(), 1, nullptr);
  EXPECT_EQ(5, data[0]);
}

TEST(RLEv1, testSigned) {
  const unsigned char buffer[] = {0x7f, 0xff, 0x20};
  SeekableInputStream* const stream =
      new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer));
  std::unique_ptr<RleDecoder> rle =
      createRleDecoder(std::unique_ptr<SeekableInputStream>(stream), true,
                       RleVersion_1, *dbcommon::getDefaultPool());
  std::vector<int64_t> data(100);
  rle->next(data.data(), data.size(), nullptr);
  for (size_t i = 0; i < data.size(); ++i) {
    EXPECT_EQ(16 - i, data[i]) << "Wrong output at " << i;
  }
  rle->next(data.data(), 30, nullptr);
  for (size_t i = 0; i < 30; ++i) {
    EXPECT_EQ(16 - 100 - static_cast<int32_t>(i), data[i])
        << "Wrong output at " << (i + 100);
  }
}

TEST(RLEv1, testNull) {
  const unsigned char buffer[] = {0x75, 0x02, 0x00};
  SeekableInputStream* const stream =
      new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer));
  std::unique_ptr<RleDecoder> rle =
      createRleDecoder(std::unique_ptr<SeekableInputStream>(stream), true,
                       RleVersion_1, *dbcommon::getDefaultPool());
  std::vector<int64_t> data(24);
  std::vector<char> notNull(24);
  for (size_t i = 0; i < notNull.size(); ++i) {
    notNull[i] = (i + 1) % 2;
  }
  for (size_t i = 0; i < 10; ++i) {
    for (size_t j = 0; j < data.size(); ++j) {
      data[j] = -1;
    }
    rle->next(data.data(), 24, notNull.data());
    for (size_t j = 0; j < 24; ++j) {
      if (notNull[j]) {
        EXPECT_EQ(i * 24 + j, data[j]);
      } else {
        EXPECT_EQ(-1, data[j]);
      }
    }
  }
}

TEST(RLEv1, testAllNulls) {
  const unsigned char buffer[] = {0xf0, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
                                  0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,
                                  0x0d, 0x0e, 0x0f, 0x3d, 0x00, 0x12};
  SeekableInputStream* const stream =
      new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer));
  std::unique_ptr<RleDecoder> rle =
      createRleDecoder(std::unique_ptr<SeekableInputStream>(stream), false,
                       RleVersion_1, *dbcommon::getDefaultPool());
  std::vector<int64_t> data(16, -1);
  std::vector<char> allNull(16, 0);
  std::vector<char> noNull(16, 1);
  rle->next(data.data(), 16, allNull.data());
  for (size_t i = 0; i < data.size(); ++i) {
    EXPECT_EQ(-1, data[i]) << "Output wrong at " << i;
  }
  rle->next(data.data(), data.size(), noNull.data());
  for (size_t i = 0; i < data.size(); ++i) {
    EXPECT_EQ(i, data[i]) << "Output wrong at " << i;
    data[i] = -1;
  }
  rle->next(data.data(), data.size(), allNull.data());
  for (size_t i = 0; i < data.size(); ++i) {
    EXPECT_EQ(-1, data[i]) << "Output wrong at " << i;
  }
  for (size_t i = 0; i < 4; ++i) {
    rle->next(data.data(), data.size(), noNull.data());
    for (size_t j = 0; j < data.size(); ++j) {
      EXPECT_EQ(18, data[j]) << "Output wrong at " << i;
    }
  }
  rle->next(data.data(), data.size(), allNull.data());
}

TEST(RLEv1, skipTest) {
  // Create the RLE stream from Java's TestRunLengthIntegerEncoding.testSkips
  // for (size_t i = 0; i < 1024; ++i)
  //   out.write(i);
  // for (size_t i = 1024; i < 2048; ++i)
  //   out.write(i * 256);
  // This causes the first half to be delta encoded and the second half to
  // be literal encoded.
  const unsigned char buffer[] = {
      127, 1,   0,   127, 1,   132, 2,   127, 1,   136, 4,   127, 1,   140, 6,
      127, 1,   144, 8,   127, 1,   148, 10,  127, 1,   152, 12,  111, 1,   156,
      14,  128, 128, 128, 32,  128, 132, 32,  128, 136, 32,  128, 140, 32,  128,
      144, 32,  128, 148, 32,  128, 152, 32,  128, 156, 32,  128, 160, 32,  128,
      164, 32,  128, 168, 32,  128, 172, 32,  128, 176, 32,  128, 180, 32,  128,
      184, 32,  128, 188, 32,  128, 192, 32,  128, 196, 32,  128, 200, 32,  128,
      204, 32,  128, 208, 32,  128, 212, 32,  128, 216, 32,  128, 220, 32,  128,
      224, 32,  128, 228, 32,  128, 232, 32,  128, 236, 32,  128, 240, 32,  128,
      244, 32,  128, 248, 32,  128, 252, 32,  128, 128, 33,  128, 132, 33,  128,
      136, 33,  128, 140, 33,  128, 144, 33,  128, 148, 33,  128, 152, 33,  128,
      156, 33,  128, 160, 33,  128, 164, 33,  128, 168, 33,  128, 172, 33,  128,
      176, 33,  128, 180, 33,  128, 184, 33,  128, 188, 33,  128, 192, 33,  128,
      196, 33,  128, 200, 33,  128, 204, 33,  128, 208, 33,  128, 212, 33,  128,
      216, 33,  128, 220, 33,  128, 224, 33,  128, 228, 33,  128, 232, 33,  128,
      236, 33,  128, 240, 33,  128, 244, 33,  128, 248, 33,  128, 252, 33,  128,
      128, 34,  128, 132, 34,  128, 136, 34,  128, 140, 34,  128, 144, 34,  128,
      148, 34,  128, 152, 34,  128, 156, 34,  128, 160, 34,  128, 164, 34,  128,
      168, 34,  128, 172, 34,  128, 176, 34,  128, 180, 34,  128, 184, 34,  128,
      188, 34,  128, 192, 34,  128, 196, 34,  128, 200, 34,  128, 204, 34,  128,
      208, 34,  128, 212, 34,  128, 216, 34,  128, 220, 34,  128, 224, 34,  128,
      228, 34,  128, 232, 34,  128, 236, 34,  128, 240, 34,  128, 244, 34,  128,
      248, 34,  128, 252, 34,  128, 128, 35,  128, 132, 35,  128, 136, 35,  128,
      140, 35,  128, 144, 35,  128, 148, 35,  128, 152, 35,  128, 156, 35,  128,
      160, 35,  128, 164, 35,  128, 168, 35,  128, 172, 35,  128, 176, 35,  128,
      180, 35,  128, 184, 35,  128, 188, 35,  128, 192, 35,  128, 196, 35,  128,
      200, 35,  128, 204, 35,  128, 208, 35,  128, 212, 35,  128, 216, 35,  128,
      220, 35,  128, 224, 35,  128, 228, 35,  128, 232, 35,  128, 236, 35,  128,
      240, 35,  128, 244, 35,  128, 248, 35,  128, 252, 35,  128, 128, 128, 36,
      128, 132, 36,  128, 136, 36,  128, 140, 36,  128, 144, 36,  128, 148, 36,
      128, 152, 36,  128, 156, 36,  128, 160, 36,  128, 164, 36,  128, 168, 36,
      128, 172, 36,  128, 176, 36,  128, 180, 36,  128, 184, 36,  128, 188, 36,
      128, 192, 36,  128, 196, 36,  128, 200, 36,  128, 204, 36,  128, 208, 36,
      128, 212, 36,  128, 216, 36,  128, 220, 36,  128, 224, 36,  128, 228, 36,
      128, 232, 36,  128, 236, 36,  128, 240, 36,  128, 244, 36,  128, 248, 36,
      128, 252, 36,  128, 128, 37,  128, 132, 37,  128, 136, 37,  128, 140, 37,
      128, 144, 37,  128, 148, 37,  128, 152, 37,  128, 156, 37,  128, 160, 37,
      128, 164, 37,  128, 168, 37,  128, 172, 37,  128, 176, 37,  128, 180, 37,
      128, 184, 37,  128, 188, 37,  128, 192, 37,  128, 196, 37,  128, 200, 37,
      128, 204, 37,  128, 208, 37,  128, 212, 37,  128, 216, 37,  128, 220, 37,
      128, 224, 37,  128, 228, 37,  128, 232, 37,  128, 236, 37,  128, 240, 37,
      128, 244, 37,  128, 248, 37,  128, 252, 37,  128, 128, 38,  128, 132, 38,
      128, 136, 38,  128, 140, 38,  128, 144, 38,  128, 148, 38,  128, 152, 38,
      128, 156, 38,  128, 160, 38,  128, 164, 38,  128, 168, 38,  128, 172, 38,
      128, 176, 38,  128, 180, 38,  128, 184, 38,  128, 188, 38,  128, 192, 38,
      128, 196, 38,  128, 200, 38,  128, 204, 38,  128, 208, 38,  128, 212, 38,
      128, 216, 38,  128, 220, 38,  128, 224, 38,  128, 228, 38,  128, 232, 38,
      128, 236, 38,  128, 240, 38,  128, 244, 38,  128, 248, 38,  128, 252, 38,
      128, 128, 39,  128, 132, 39,  128, 136, 39,  128, 140, 39,  128, 144, 39,
      128, 148, 39,  128, 152, 39,  128, 156, 39,  128, 160, 39,  128, 164, 39,
      128, 168, 39,  128, 172, 39,  128, 176, 39,  128, 180, 39,  128, 184, 39,
      128, 188, 39,  128, 192, 39,  128, 196, 39,  128, 200, 39,  128, 204, 39,
      128, 208, 39,  128, 212, 39,  128, 216, 39,  128, 220, 39,  128, 224, 39,
      128, 228, 39,  128, 232, 39,  128, 236, 39,  128, 240, 39,  128, 244, 39,
      128, 248, 39,  128, 252, 39,  128, 128, 128, 40,  128, 132, 40,  128, 136,
      40,  128, 140, 40,  128, 144, 40,  128, 148, 40,  128, 152, 40,  128, 156,
      40,  128, 160, 40,  128, 164, 40,  128, 168, 40,  128, 172, 40,  128, 176,
      40,  128, 180, 40,  128, 184, 40,  128, 188, 40,  128, 192, 40,  128, 196,
      40,  128, 200, 40,  128, 204, 40,  128, 208, 40,  128, 212, 40,  128, 216,
      40,  128, 220, 40,  128, 224, 40,  128, 228, 40,  128, 232, 40,  128, 236,
      40,  128, 240, 40,  128, 244, 40,  128, 248, 40,  128, 252, 40,  128, 128,
      41,  128, 132, 41,  128, 136, 41,  128, 140, 41,  128, 144, 41,  128, 148,
      41,  128, 152, 41,  128, 156, 41,  128, 160, 41,  128, 164, 41,  128, 168,
      41,  128, 172, 41,  128, 176, 41,  128, 180, 41,  128, 184, 41,  128, 188,
      41,  128, 192, 41,  128, 196, 41,  128, 200, 41,  128, 204, 41,  128, 208,
      41,  128, 212, 41,  128, 216, 41,  128, 220, 41,  128, 224, 41,  128, 228,
      41,  128, 232, 41,  128, 236, 41,  128, 240, 41,  128, 244, 41,  128, 248,
      41,  128, 252, 41,  128, 128, 42,  128, 132, 42,  128, 136, 42,  128, 140,
      42,  128, 144, 42,  128, 148, 42,  128, 152, 42,  128, 156, 42,  128, 160,
      42,  128, 164, 42,  128, 168, 42,  128, 172, 42,  128, 176, 42,  128, 180,
      42,  128, 184, 42,  128, 188, 42,  128, 192, 42,  128, 196, 42,  128, 200,
      42,  128, 204, 42,  128, 208, 42,  128, 212, 42,  128, 216, 42,  128, 220,
      42,  128, 224, 42,  128, 228, 42,  128, 232, 42,  128, 236, 42,  128, 240,
      42,  128, 244, 42,  128, 248, 42,  128, 252, 42,  128, 128, 43,  128, 132,
      43,  128, 136, 43,  128, 140, 43,  128, 144, 43,  128, 148, 43,  128, 152,
      43,  128, 156, 43,  128, 160, 43,  128, 164, 43,  128, 168, 43,  128, 172,
      43,  128, 176, 43,  128, 180, 43,  128, 184, 43,  128, 188, 43,  128, 192,
      43,  128, 196, 43,  128, 200, 43,  128, 204, 43,  128, 208, 43,  128, 212,
      43,  128, 216, 43,  128, 220, 43,  128, 224, 43,  128, 228, 43,  128, 232,
      43,  128, 236, 43,  128, 240, 43,  128, 244, 43,  128, 248, 43,  128, 252,
      43,  128, 128, 128, 44,  128, 132, 44,  128, 136, 44,  128, 140, 44,  128,
      144, 44,  128, 148, 44,  128, 152, 44,  128, 156, 44,  128, 160, 44,  128,
      164, 44,  128, 168, 44,  128, 172, 44,  128, 176, 44,  128, 180, 44,  128,
      184, 44,  128, 188, 44,  128, 192, 44,  128, 196, 44,  128, 200, 44,  128,
      204, 44,  128, 208, 44,  128, 212, 44,  128, 216, 44,  128, 220, 44,  128,
      224, 44,  128, 228, 44,  128, 232, 44,  128, 236, 44,  128, 240, 44,  128,
      244, 44,  128, 248, 44,  128, 252, 44,  128, 128, 45,  128, 132, 45,  128,
      136, 45,  128, 140, 45,  128, 144, 45,  128, 148, 45,  128, 152, 45,  128,
      156, 45,  128, 160, 45,  128, 164, 45,  128, 168, 45,  128, 172, 45,  128,
      176, 45,  128, 180, 45,  128, 184, 45,  128, 188, 45,  128, 192, 45,  128,
      196, 45,  128, 200, 45,  128, 204, 45,  128, 208, 45,  128, 212, 45,  128,
      216, 45,  128, 220, 45,  128, 224, 45,  128, 228, 45,  128, 232, 45,  128,
      236, 45,  128, 240, 45,  128, 244, 45,  128, 248, 45,  128, 252, 45,  128,
      128, 46,  128, 132, 46,  128, 136, 46,  128, 140, 46,  128, 144, 46,  128,
      148, 46,  128, 152, 46,  128, 156, 46,  128, 160, 46,  128, 164, 46,  128,
      168, 46,  128, 172, 46,  128, 176, 46,  128, 180, 46,  128, 184, 46,  128,
      188, 46,  128, 192, 46,  128, 196, 46,  128, 200, 46,  128, 204, 46,  128,
      208, 46,  128, 212, 46,  128, 216, 46,  128, 220, 46,  128, 224, 46,  128,
      228, 46,  128, 232, 46,  128, 236, 46,  128, 240, 46,  128, 244, 46,  128,
      248, 46,  128, 252, 46,  128, 128, 47,  128, 132, 47,  128, 136, 47,  128,
      140, 47,  128, 144, 47,  128, 148, 47,  128, 152, 47,  128, 156, 47,  128,
      160, 47,  128, 164, 47,  128, 168, 47,  128, 172, 47,  128, 176, 47,  128,
      180, 47,  128, 184, 47,  128, 188, 47,  128, 192, 47,  128, 196, 47,  128,
      200, 47,  128, 204, 47,  128, 208, 47,  128, 212, 47,  128, 216, 47,  128,
      220, 47,  128, 224, 47,  128, 228, 47,  128, 232, 47,  128, 236, 47,  128,
      240, 47,  128, 244, 47,  128, 248, 47,  128, 252, 47,  128, 128, 128, 48,
      128, 132, 48,  128, 136, 48,  128, 140, 48,  128, 144, 48,  128, 148, 48,
      128, 152, 48,  128, 156, 48,  128, 160, 48,  128, 164, 48,  128, 168, 48,
      128, 172, 48,  128, 176, 48,  128, 180, 48,  128, 184, 48,  128, 188, 48,
      128, 192, 48,  128, 196, 48,  128, 200, 48,  128, 204, 48,  128, 208, 48,
      128, 212, 48,  128, 216, 48,  128, 220, 48,  128, 224, 48,  128, 228, 48,
      128, 232, 48,  128, 236, 48,  128, 240, 48,  128, 244, 48,  128, 248, 48,
      128, 252, 48,  128, 128, 49,  128, 132, 49,  128, 136, 49,  128, 140, 49,
      128, 144, 49,  128, 148, 49,  128, 152, 49,  128, 156, 49,  128, 160, 49,
      128, 164, 49,  128, 168, 49,  128, 172, 49,  128, 176, 49,  128, 180, 49,
      128, 184, 49,  128, 188, 49,  128, 192, 49,  128, 196, 49,  128, 200, 49,
      128, 204, 49,  128, 208, 49,  128, 212, 49,  128, 216, 49,  128, 220, 49,
      128, 224, 49,  128, 228, 49,  128, 232, 49,  128, 236, 49,  128, 240, 49,
      128, 244, 49,  128, 248, 49,  128, 252, 49,  128, 128, 50,  128, 132, 50,
      128, 136, 50,  128, 140, 50,  128, 144, 50,  128, 148, 50,  128, 152, 50,
      128, 156, 50,  128, 160, 50,  128, 164, 50,  128, 168, 50,  128, 172, 50,
      128, 176, 50,  128, 180, 50,  128, 184, 50,  128, 188, 50,  128, 192, 50,
      128, 196, 50,  128, 200, 50,  128, 204, 50,  128, 208, 50,  128, 212, 50,
      128, 216, 50,  128, 220, 50,  128, 224, 50,  128, 228, 50,  128, 232, 50,
      128, 236, 50,  128, 240, 50,  128, 244, 50,  128, 248, 50,  128, 252, 50,
      128, 128, 51,  128, 132, 51,  128, 136, 51,  128, 140, 51,  128, 144, 51,
      128, 148, 51,  128, 152, 51,  128, 156, 51,  128, 160, 51,  128, 164, 51,
      128, 168, 51,  128, 172, 51,  128, 176, 51,  128, 180, 51,  128, 184, 51,
      128, 188, 51,  128, 192, 51,  128, 196, 51,  128, 200, 51,  128, 204, 51,
      128, 208, 51,  128, 212, 51,  128, 216, 51,  128, 220, 51,  128, 224, 51,
      128, 228, 51,  128, 232, 51,  128, 236, 51,  128, 240, 51,  128, 244, 51,
      128, 248, 51,  128, 252, 51,  128, 128, 128, 52,  128, 132, 52,  128, 136,
      52,  128, 140, 52,  128, 144, 52,  128, 148, 52,  128, 152, 52,  128, 156,
      52,  128, 160, 52,  128, 164, 52,  128, 168, 52,  128, 172, 52,  128, 176,
      52,  128, 180, 52,  128, 184, 52,  128, 188, 52,  128, 192, 52,  128, 196,
      52,  128, 200, 52,  128, 204, 52,  128, 208, 52,  128, 212, 52,  128, 216,
      52,  128, 220, 52,  128, 224, 52,  128, 228, 52,  128, 232, 52,  128, 236,
      52,  128, 240, 52,  128, 244, 52,  128, 248, 52,  128, 252, 52,  128, 128,
      53,  128, 132, 53,  128, 136, 53,  128, 140, 53,  128, 144, 53,  128, 148,
      53,  128, 152, 53,  128, 156, 53,  128, 160, 53,  128, 164, 53,  128, 168,
      53,  128, 172, 53,  128, 176, 53,  128, 180, 53,  128, 184, 53,  128, 188,
      53,  128, 192, 53,  128, 196, 53,  128, 200, 53,  128, 204, 53,  128, 208,
      53,  128, 212, 53,  128, 216, 53,  128, 220, 53,  128, 224, 53,  128, 228,
      53,  128, 232, 53,  128, 236, 53,  128, 240, 53,  128, 244, 53,  128, 248,
      53,  128, 252, 53,  128, 128, 54,  128, 132, 54,  128, 136, 54,  128, 140,
      54,  128, 144, 54,  128, 148, 54,  128, 152, 54,  128, 156, 54,  128, 160,
      54,  128, 164, 54,  128, 168, 54,  128, 172, 54,  128, 176, 54,  128, 180,
      54,  128, 184, 54,  128, 188, 54,  128, 192, 54,  128, 196, 54,  128, 200,
      54,  128, 204, 54,  128, 208, 54,  128, 212, 54,  128, 216, 54,  128, 220,
      54,  128, 224, 54,  128, 228, 54,  128, 232, 54,  128, 236, 54,  128, 240,
      54,  128, 244, 54,  128, 248, 54,  128, 252, 54,  128, 128, 55,  128, 132,
      55,  128, 136, 55,  128, 140, 55,  128, 144, 55,  128, 148, 55,  128, 152,
      55,  128, 156, 55,  128, 160, 55,  128, 164, 55,  128, 168, 55,  128, 172,
      55,  128, 176, 55,  128, 180, 55,  128, 184, 55,  128, 188, 55,  128, 192,
      55,  128, 196, 55,  128, 200, 55,  128, 204, 55,  128, 208, 55,  128, 212,
      55,  128, 216, 55,  128, 220, 55,  128, 224, 55,  128, 228, 55,  128, 232,
      55,  128, 236, 55,  128, 240, 55,  128, 244, 55,  128, 248, 55,  128, 252,
      55,  128, 128, 128, 56,  128, 132, 56,  128, 136, 56,  128, 140, 56,  128,
      144, 56,  128, 148, 56,  128, 152, 56,  128, 156, 56,  128, 160, 56,  128,
      164, 56,  128, 168, 56,  128, 172, 56,  128, 176, 56,  128, 180, 56,  128,
      184, 56,  128, 188, 56,  128, 192, 56,  128, 196, 56,  128, 200, 56,  128,
      204, 56,  128, 208, 56,  128, 212, 56,  128, 216, 56,  128, 220, 56,  128,
      224, 56,  128, 228, 56,  128, 232, 56,  128, 236, 56,  128, 240, 56,  128,
      244, 56,  128, 248, 56,  128, 252, 56,  128, 128, 57,  128, 132, 57,  128,
      136, 57,  128, 140, 57,  128, 144, 57,  128, 148, 57,  128, 152, 57,  128,
      156, 57,  128, 160, 57,  128, 164, 57,  128, 168, 57,  128, 172, 57,  128,
      176, 57,  128, 180, 57,  128, 184, 57,  128, 188, 57,  128, 192, 57,  128,
      196, 57,  128, 200, 57,  128, 204, 57,  128, 208, 57,  128, 212, 57,  128,
      216, 57,  128, 220, 57,  128, 224, 57,  128, 228, 57,  128, 232, 57,  128,
      236, 57,  128, 240, 57,  128, 244, 57,  128, 248, 57,  128, 252, 57,  128,
      128, 58,  128, 132, 58,  128, 136, 58,  128, 140, 58,  128, 144, 58,  128,
      148, 58,  128, 152, 58,  128, 156, 58,  128, 160, 58,  128, 164, 58,  128,
      168, 58,  128, 172, 58,  128, 176, 58,  128, 180, 58,  128, 184, 58,  128,
      188, 58,  128, 192, 58,  128, 196, 58,  128, 200, 58,  128, 204, 58,  128,
      208, 58,  128, 212, 58,  128, 216, 58,  128, 220, 58,  128, 224, 58,  128,
      228, 58,  128, 232, 58,  128, 236, 58,  128, 240, 58,  128, 244, 58,  128,
      248, 58,  128, 252, 58,  128, 128, 59,  128, 132, 59,  128, 136, 59,  128,
      140, 59,  128, 144, 59,  128, 148, 59,  128, 152, 59,  128, 156, 59,  128,
      160, 59,  128, 164, 59,  128, 168, 59,  128, 172, 59,  128, 176, 59,  128,
      180, 59,  128, 184, 59,  128, 188, 59,  128, 192, 59,  128, 196, 59,  128,
      200, 59,  128, 204, 59,  128, 208, 59,  128, 212, 59,  128, 216, 59,  128,
      220, 59,  128, 224, 59,  128, 228, 59,  128, 232, 59,  128, 236, 59,  128,
      240, 59,  128, 244, 59,  128, 248, 59,  128, 252, 59,  128, 128, 128, 60,
      128, 132, 60,  128, 136, 60,  128, 140, 60,  128, 144, 60,  128, 148, 60,
      128, 152, 60,  128, 156, 60,  128, 160, 60,  128, 164, 60,  128, 168, 60,
      128, 172, 60,  128, 176, 60,  128, 180, 60,  128, 184, 60,  128, 188, 60,
      128, 192, 60,  128, 196, 60,  128, 200, 60,  128, 204, 60,  128, 208, 60,
      128, 212, 60,  128, 216, 60,  128, 220, 60,  128, 224, 60,  128, 228, 60,
      128, 232, 60,  128, 236, 60,  128, 240, 60,  128, 244, 60,  128, 248, 60,
      128, 252, 60,  128, 128, 61,  128, 132, 61,  128, 136, 61,  128, 140, 61,
      128, 144, 61,  128, 148, 61,  128, 152, 61,  128, 156, 61,  128, 160, 61,
      128, 164, 61,  128, 168, 61,  128, 172, 61,  128, 176, 61,  128, 180, 61,
      128, 184, 61,  128, 188, 61,  128, 192, 61,  128, 196, 61,  128, 200, 61,
      128, 204, 61,  128, 208, 61,  128, 212, 61,  128, 216, 61,  128, 220, 61,
      128, 224, 61,  128, 228, 61,  128, 232, 61,  128, 236, 61,  128, 240, 61,
      128, 244, 61,  128, 248, 61,  128, 252, 61,  128, 128, 62,  128, 132, 62,
      128, 136, 62,  128, 140, 62,  128, 144, 62,  128, 148, 62,  128, 152, 62,
      128, 156, 62,  128, 160, 62,  128, 164, 62,  128, 168, 62,  128, 172, 62,
      128, 176, 62,  128, 180, 62,  128, 184, 62,  128, 188, 62,  128, 192, 62,
      128, 196, 62,  128, 200, 62,  128, 204, 62,  128, 208, 62,  128, 212, 62,
      128, 216, 62,  128, 220, 62,  128, 224, 62,  128, 228, 62,  128, 232, 62,
      128, 236, 62,  128, 240, 62,  128, 244, 62,  128, 248, 62,  128, 252, 62,
      128, 128, 63,  128, 132, 63,  128, 136, 63,  128, 140, 63,  128, 144, 63,
      128, 148, 63,  128, 152, 63,  128, 156, 63,  128, 160, 63,  128, 164, 63,
      128, 168, 63,  128, 172, 63,  128, 176, 63,  128, 180, 63,  128, 184, 63,
      128, 188, 63,  128, 192, 63,  128, 196, 63,  128, 200, 63,  128, 204, 63,
      128, 208, 63,  128, 212, 63,  128, 216, 63,  128, 220, 63,  128, 224, 63,
      128, 228, 63,  128, 232, 63,  128, 236, 63,  128, 240, 63,  128, 244, 63,
      128, 248, 63,  128, 252, 63};
  SeekableInputStream* const stream =
      new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer));
  std::unique_ptr<RleDecoder> rle =
      createRleDecoder(std::unique_ptr<SeekableInputStream>(stream), true,
                       RleVersion_1, *dbcommon::getDefaultPool());
  std::vector<int64_t> data(1);
  for (size_t i = 0; i < 2048; i += 10) {
    rle->next(data.data(), 1, nullptr);
    if (i < 1024) {
      EXPECT_EQ(i, data[0]) << "Wrong output at " << i;
    } else {
      EXPECT_EQ(256 * i, data[0]) << "Wrong output at " << i;
    }
    if (i < 2038) {
      rle->skip(9);
    }
    rle->skip(0);
  }
}

TEST(RLEv1, seekTest) {
  // Create the RLE stream from Java's
  // TestRunLengthIntegerEncoding.testUncompressedSeek
  // for (size_t i = 0; i < 1024; ++i)
  //   out.write(i / 4);
  // for (size_t i = 1024; i < 2048; ++i)
  //   out.write(2 * i);
  // for (size_t i = 0; i < 2048; ++i)
  //   out.write(junk[i]);
  // This causes the first half to be delta encoded and the second half to
  // be literal encoded.
  const unsigned char buffer[] = {
      1,   0,   0,   1,   0,   2,   1,   0,   4,   1,   0,   6,   1,   0,   8,
      1,   0,   10,  1,   0,   12,  1,   0,   14,  1,   0,   16,  1,   0,   18,
      1,   0,   20,  1,   0,   22,  1,   0,   24,  1,   0,   26,  1,   0,   28,
      1,   0,   30,  1,   0,   32,  1,   0,   34,  1,   0,   36,  1,   0,   38,
      1,   0,   40,  1,   0,   42,  1,   0,   44,  1,   0,   46,  1,   0,   48,
      1,   0,   50,  1,   0,   52,  1,   0,   54,  1,   0,   56,  1,   0,   58,
      1,   0,   60,  1,   0,   62,  1,   0,   64,  1,   0,   66,  1,   0,   68,
      1,   0,   70,  1,   0,   72,  1,   0,   74,  1,   0,   76,  1,   0,   78,
      1,   0,   80,  1,   0,   82,  1,   0,   84,  1,   0,   86,  1,   0,   88,
      1,   0,   90,  1,   0,   92,  1,   0,   94,  1,   0,   96,  1,   0,   98,
      1,   0,   100, 1,   0,   102, 1,   0,   104, 1,   0,   106, 1,   0,   108,
      1,   0,   110, 1,   0,   112, 1,   0,   114, 1,   0,   116, 1,   0,   118,
      1,   0,   120, 1,   0,   122, 1,   0,   124, 1,   0,   126, 1,   0,   128,
      1,   1,   0,   130, 1,   1,   0,   132, 1,   1,   0,   134, 1,   1,   0,
      136, 1,   1,   0,   138, 1,   1,   0,   140, 1,   1,   0,   142, 1,   1,
      0,   144, 1,   1,   0,   146, 1,   1,   0,   148, 1,   1,   0,   150, 1,
      1,   0,   152, 1,   1,   0,   154, 1,   1,   0,   156, 1,   1,   0,   158,
      1,   1,   0,   160, 1,   1,   0,   162, 1,   1,   0,   164, 1,   1,   0,
      166, 1,   1,   0,   168, 1,   1,   0,   170, 1,   1,   0,   172, 1,   1,
      0,   174, 1,   1,   0,   176, 1,   1,   0,   178, 1,   1,   0,   180, 1,
      1,   0,   182, 1,   1,   0,   184, 1,   1,   0,   186, 1,   1,   0,   188,
      1,   1,   0,   190, 1,   1,   0,   192, 1,   1,   0,   194, 1,   1,   0,
      196, 1,   1,   0,   198, 1,   1,   0,   200, 1,   1,   0,   202, 1,   1,
      0,   204, 1,   1,   0,   206, 1,   1,   0,   208, 1,   1,   0,   210, 1,
      1,   0,   212, 1,   1,   0,   214, 1,   1,   0,   216, 1,   1,   0,   218,
      1,   1,   0,   220, 1,   1,   0,   222, 1,   1,   0,   224, 1,   1,   0,
      226, 1,   1,   0,   228, 1,   1,   0,   230, 1,   1,   0,   232, 1,   1,
      0,   234, 1,   1,   0,   236, 1,   1,   0,   238, 1,   1,   0,   240, 1,
      1,   0,   242, 1,   1,   0,   244, 1,   1,   0,   246, 1,   1,   0,   248,
      1,   1,   0,   250, 1,   1,   0,   252, 1,   1,   0,   254, 1,   1,   0,
      128, 2,   1,   0,   130, 2,   1,   0,   132, 2,   1,   0,   134, 2,   1,
      0,   136, 2,   1,   0,   138, 2,   1,   0,   140, 2,   1,   0,   142, 2,
      1,   0,   144, 2,   1,   0,   146, 2,   1,   0,   148, 2,   1,   0,   150,
      2,   1,   0,   152, 2,   1,   0,   154, 2,   1,   0,   156, 2,   1,   0,
      158, 2,   1,   0,   160, 2,   1,   0,   162, 2,   1,   0,   164, 2,   1,
      0,   166, 2,   1,   0,   168, 2,   1,   0,   170, 2,   1,   0,   172, 2,
      1,   0,   174, 2,   1,   0,   176, 2,   1,   0,   178, 2,   1,   0,   180,
      2,   1,   0,   182, 2,   1,   0,   184, 2,   1,   0,   186, 2,   1,   0,
      188, 2,   1,   0,   190, 2,   1,   0,   192, 2,   1,   0,   194, 2,   1,
      0,   196, 2,   1,   0,   198, 2,   1,   0,   200, 2,   1,   0,   202, 2,
      1,   0,   204, 2,   1,   0,   206, 2,   1,   0,   208, 2,   1,   0,   210,
      2,   1,   0,   212, 2,   1,   0,   214, 2,   1,   0,   216, 2,   1,   0,
      218, 2,   1,   0,   220, 2,   1,   0,   222, 2,   1,   0,   224, 2,   1,
      0,   226, 2,   1,   0,   228, 2,   1,   0,   230, 2,   1,   0,   232, 2,
      1,   0,   234, 2,   1,   0,   236, 2,   1,   0,   238, 2,   1,   0,   240,
      2,   1,   0,   242, 2,   1,   0,   244, 2,   1,   0,   246, 2,   1,   0,
      248, 2,   1,   0,   250, 2,   1,   0,   252, 2,   1,   0,   254, 2,   1,
      0,   128, 3,   1,   0,   130, 3,   1,   0,   132, 3,   1,   0,   134, 3,
      1,   0,   136, 3,   1,   0,   138, 3,   1,   0,   140, 3,   1,   0,   142,
      3,   1,   0,   144, 3,   1,   0,   146, 3,   1,   0,   148, 3,   1,   0,
      150, 3,   1,   0,   152, 3,   1,   0,   154, 3,   1,   0,   156, 3,   1,
      0,   158, 3,   1,   0,   160, 3,   1,   0,   162, 3,   1,   0,   164, 3,
      1,   0,   166, 3,   1,   0,   168, 3,   1,   0,   170, 3,   1,   0,   172,
      3,   1,   0,   174, 3,   1,   0,   176, 3,   1,   0,   178, 3,   1,   0,
      180, 3,   1,   0,   182, 3,   1,   0,   184, 3,   1,   0,   186, 3,   1,
      0,   188, 3,   1,   0,   190, 3,   1,   0,   192, 3,   1,   0,   194, 3,
      1,   0,   196, 3,   1,   0,   198, 3,   1,   0,   200, 3,   1,   0,   202,
      3,   1,   0,   204, 3,   1,   0,   206, 3,   1,   0,   208, 3,   1,   0,
      210, 3,   1,   0,   212, 3,   1,   0,   214, 3,   1,   0,   216, 3,   1,
      0,   218, 3,   1,   0,   220, 3,   1,   0,   222, 3,   1,   0,   224, 3,
      1,   0,   226, 3,   1,   0,   228, 3,   1,   0,   230, 3,   1,   0,   232,
      3,   1,   0,   234, 3,   1,   0,   236, 3,   1,   0,   238, 3,   1,   0,
      240, 3,   1,   0,   242, 3,   1,   0,   244, 3,   1,   0,   246, 3,   1,
      0,   248, 3,   1,   0,   250, 3,   1,   0,   252, 3,   1,   0,   254, 3,
      127, 2,   128, 32,  127, 2,   136, 36,  127, 2,   144, 40,  127, 2,   152,
      44,  127, 2,   160, 48,  127, 2,   168, 52,  127, 2,   176, 56,  111, 2,
      184, 60,  128, 147, 150, 232, 240, 8,   168, 134, 179, 187, 12,  246, 145,
      173, 142, 11,  241, 162, 190, 162, 9,   239, 218, 128, 243, 5,   202, 175,
      131, 196, 12,  151, 253, 204, 160, 4,   229, 167, 247, 255, 12,  255, 177,
      140, 184, 7,   188, 145, 181, 229, 1,   178, 190, 158, 163, 8,   147, 179,
      151, 132, 8,   150, 133, 222, 129, 11,  193, 218, 187, 242, 14,  181, 177,
      154, 155, 9,   150, 145, 194, 135, 8,   186, 222, 142, 242, 10,  140, 195,
      254, 237, 11,  141, 189, 143, 198, 14,  229, 146, 237, 203, 8,   251, 162,
      179, 211, 3,   222, 237, 175, 145, 13,  221, 178, 163, 162, 3,   211, 192,
      165, 189, 14,  230, 228, 168, 250, 4,   141, 140, 247, 178, 7,   143, 164,
      170, 152, 2,   131, 166, 136, 26,  171, 143, 232, 134, 12,  158, 239, 246,
      204, 11,  133, 128, 213, 223, 14,  255, 213, 190, 250, 15,  143, 162, 252,
      157, 4,   204, 181, 135, 245, 7,   206, 241, 254, 136, 4,   184, 182, 211,
      190, 15,  172, 156, 202, 135, 10,  249, 180, 139, 131, 4,   202, 128, 204,
      221, 9,   131, 247, 166, 249, 8,   141, 236, 241, 185, 3,   128, 229, 150,
      186, 2,   237, 189, 141, 218, 9,   193, 240, 241, 156, 3,   210, 142, 198,
      202, 10,  227, 241, 194, 234, 7,   145, 180, 228, 254, 6,   171, 249, 185,
      188, 11,  215, 135, 224, 219, 4,   133, 132, 178, 165, 7,   205, 180, 133,
      209, 11,  198, 253, 246, 145, 12,  190, 194, 153, 146, 8,   139, 220, 235,
      249, 1,   170, 203, 205, 159, 6,   136, 130, 154, 166, 14,  250, 189, 153,
      191, 7,   178, 163, 191, 158, 12,  251, 138, 135, 245, 10,  175, 249, 219,
      164, 14,  136, 185, 220, 188, 7,   170, 135, 221, 146, 7,   209, 224, 204,
      171, 11,  216, 144, 236, 172, 1,   133, 205, 202, 170, 6,   215, 250, 133,
      181, 3,   181, 133, 142, 158, 5,   166, 192, 134, 238, 13,  246, 243, 233,
      218, 12,  163, 202, 238, 241, 14,  241, 214, 224, 215, 2,   212, 192, 237,
      243, 10,  163, 165, 163, 206, 6,   159, 161, 227, 152, 14,  209, 234, 225,
      249, 13,  167, 206, 188, 161, 3,   143, 209, 188, 214, 11,  184, 224, 210,
      200, 10,  185, 171, 199, 183, 3,   177, 229, 245, 86,  255, 183, 178, 142,
      9,   232, 209, 135, 151, 8,   191, 153, 174, 175, 7,   190, 245, 224, 174,
      9,   243, 165, 145, 169, 1,   145, 161, 221, 249, 13,  195, 221, 244, 240,
      5,   157, 156, 217, 237, 15,  143, 201, 155, 207, 5,   169, 136, 192, 238,
      12,  135, 223, 244, 200, 2,   137, 228, 167, 187, 1,   134, 212, 158, 155,
      15,  186, 224, 212, 214, 7,   193, 141, 216, 241, 2,   246, 159, 138, 117,
      216, 230, 215, 29,  204, 178, 147, 255, 8,   195, 140, 136, 164, 11,  234,
      204, 155, 222, 10,  193, 156, 138, 187, 8,   161, 161, 184, 212, 1,   128,
      141, 162, 133, 13,  180, 211, 132, 210, 9,   239, 203, 201, 177, 5,   236,
      191, 140, 207, 13,  173, 205, 192, 186, 7,   179, 214, 222, 136, 8,   189,
      142, 204, 152, 5,   221, 176, 135, 241, 1,   223, 146, 195, 166, 11,  146,
      133, 226, 137, 6,   150, 243, 247, 1,   153, 246, 184, 42,  234, 194, 229,
      98,  237, 144, 253, 133, 11,  196, 131, 158, 244, 6,   218, 149, 253, 221,
      7,   219, 180, 234, 156, 10,  179, 255, 197, 218, 13,  150, 137, 240, 204,
      9,   240, 185, 181, 203, 2,   160, 194, 146, 246, 5,   131, 168, 191, 138,
      4,   158, 245, 240, 150, 15,  157, 202, 136, 14,  135, 154, 226, 240, 5,
      153, 168, 212, 222, 8,   128, 218, 198, 244, 133, 13,  183, 245, 153, 118,
      139, 141, 238, 141, 1,   235, 193, 197, 5,   169, 141, 210, 62,  231, 186,
      238, 219, 6,   141, 243, 204, 242, 12,  172, 165, 150, 187, 13,  163, 254,
      250, 230, 12,  203, 166, 166, 223, 3,   177, 155, 168, 182, 4,   213, 130,
      148, 221, 3,   150, 178, 146, 235, 6,   149, 226, 237, 225, 2,   177, 149,
      218, 10,  205, 241, 161, 21,  186, 239, 197, 189, 15,  132, 249, 249, 171,
      5,   130, 223, 220, 167, 5,   171, 235, 129, 84,  207, 145, 246, 231, 2,
      183, 176, 230, 148, 11,  180, 142, 254, 128, 1,   171, 251, 177, 177, 1,
      188, 190, 157, 222, 11,  140, 195, 192, 141, 10,  200, 139, 160, 247, 9,
      139, 247, 194, 144, 1,   160, 160, 234, 208, 11,  174, 210, 150, 196, 15,
      209, 201, 176, 208, 14,  199, 183, 218, 132, 8,   175, 143, 188, 168, 7,
      172, 234, 158, 248, 11,  192, 223, 160, 152, 7,   178, 134, 130, 235, 3,
      243, 134, 181, 181, 4,   225, 135, 251, 236, 7,   203, 166, 149, 169, 10,
      181, 213, 156, 193, 12,  239, 138, 235, 252, 2,   183, 243, 201, 133, 10,
      137, 186, 227, 237, 13,  255, 188, 221, 148, 14,  188, 156, 198, 143, 15,
      223, 224, 252, 208, 9,   160, 241, 190, 221, 13,  195, 241, 163, 241, 9,
      199, 253, 138, 163, 12,  173, 251, 143, 133, 12,  167, 246, 153, 247, 14,
      237, 223, 140, 174, 14,  219, 229, 138, 242, 2,   200, 163, 210, 86,  197,
      251, 199, 241, 9,   243, 211, 209, 132, 3,   178, 176, 152, 224, 13,  195,
      131, 248, 159, 5,   194, 255, 160, 171, 14,  145, 243, 143, 173, 3,   222,
      168, 246, 134, 2,   178, 145, 204, 240, 1,   176, 240, 236, 165, 14,  254,
      145, 162, 165, 8,   243, 173, 131, 238, 3,   247, 192, 235, 163, 4,   244,
      239, 180, 203, 15,  214, 167, 152, 233, 13,  176, 158, 206, 235, 9,   252,
      150, 228, 160, 13,  148, 243, 234, 239, 2,   225, 152, 250, 167, 5,   252,
      143, 229, 254, 4,   184, 202, 161, 157, 14,  233, 190, 185, 195, 9,   159,
      223, 240, 216, 11,  132, 172, 243, 200, 6,   212, 182, 191, 194, 13,  230,
      245, 240, 130, 12,  189, 146, 233, 239, 2,   155, 190, 214, 183, 15,  159,
      222, 148, 155, 13,  195, 158, 248, 112, 224, 219, 145, 234, 12,  145, 169,
      172, 135, 10,  234, 184, 245, 220, 4,   138, 150, 232, 212, 5,   132, 195,
      135, 214, 5,   181, 247, 216, 205, 12,  239, 160, 183, 178, 9,   161, 143,
      210, 206, 11,  248, 209, 207, 94,  166, 178, 165, 97,  133, 162, 246, 212,
      9,   206, 240, 235, 156, 1,   200, 228, 176, 252, 12,  163, 215, 219, 141,
      1,   236, 133, 216, 202, 9,   220, 170, 222, 242, 10,  239, 203, 197, 220,
      11,  148, 218, 209, 161, 7,   185, 175, 210, 171, 15,  153, 213, 208, 214,
      15,  188, 239, 128, 244, 13,  141, 220, 136, 166, 12,  150, 148, 250, 175,
      13,  130, 145, 226, 216, 1,   216, 204, 215, 193, 9,   191, 211, 181, 229,
      14,  233, 168, 165, 9,   240, 188, 146, 132, 12,  173, 220, 201, 244, 4,
      140, 147, 190, 199, 15,  190, 213, 175, 213, 1,   254, 212, 239, 171, 10,
      200, 161, 168, 144, 10,  161, 188, 230, 163, 6,   192, 198, 213, 167, 3,
      240, 251, 180, 243, 5,   202, 165, 247, 147, 7,   173, 191, 133, 228, 3,
      229, 139, 154, 210, 7,   147, 254, 164, 236, 13,  162, 214, 180, 128, 8,
      202, 176, 252, 143, 13,  154, 179, 169, 149, 3,   169, 156, 168, 229, 1,
      164, 128, 214, 138, 15,  128, 239, 253, 160, 181, 2,   232, 203, 196, 235,
      11,  181, 153, 131, 240, 12,  145, 178, 179, 206, 12,  134, 244, 215, 141,
      10,  138, 228, 171, 244, 7,   246, 160, 221, 177, 14,  176, 231, 208, 135,
      9,   194, 210, 159, 234, 2,   238, 250, 139, 146, 10,  249, 191, 224, 241,
      10,  250, 140, 140, 147, 5,   190, 185, 216, 220, 15,  248, 131, 153, 236,
      9,   140, 219, 183, 252, 14,  254, 184, 223, 216, 14,  253, 211, 235, 254,
      14,  252, 180, 147, 152, 9,   147, 221, 188, 174, 1,   222, 219, 180, 185,
      12,  185, 175, 244, 136, 9,   214, 147, 217, 182, 4,   191, 193, 233, 157,
      2,   238, 191, 156, 211, 14,  229, 221, 129, 224, 2,   230, 212, 248, 128,
      3,   186, 165, 136, 84,  129, 216, 148, 139, 15,  150, 231, 196, 184, 8,
      160, 156, 253, 171, 2,   156, 198, 161, 183, 11,  164, 181, 155, 137, 8,
      133, 196, 192, 213, 6,   140, 174, 143, 152, 12,  142, 202, 143, 192, 9,
      128, 167, 234, 152, 13,  214, 131, 156, 246, 14,  167, 223, 250, 135, 4,
      233, 185, 236, 128, 1,   138, 131, 251, 181, 9,   184, 141, 213, 136, 15,
      171, 224, 222, 192, 12,  244, 168, 162, 144, 1,   212, 183, 184, 200, 9,
      177, 193, 168, 174, 14,  249, 175, 129, 197, 1,   142, 181, 130, 162, 10,
      214, 197, 196, 214, 4,   148, 146, 228, 202, 13,  213, 154, 241, 127, 165,
      166, 144, 164, 4,   205, 251, 139, 128, 13,  244, 188, 143, 236, 12,  190,
      247, 138, 217, 8,   185, 201, 217, 187, 4,   130, 142, 167, 137, 4,   139,
      185, 215, 95,  136, 170, 224, 218, 9,   154, 158, 177, 200, 15,  227, 154,
      189, 136, 15,  224, 233, 220, 179, 3,   227, 203, 160, 188, 7,   236, 228,
      239, 162, 15,  214, 227, 159, 242, 4,   151, 252, 232, 42,  151, 166, 168,
      245, 3,   135, 180, 250, 243, 15,  167, 254, 137, 160, 13,  214, 240, 225,
      152, 8,   190, 229, 204, 136, 13,  150, 219, 186, 10,  163, 249, 225, 249,
      6,   215, 233, 254, 162, 9,   171, 204, 237, 189, 5,   229, 137, 174, 157,
      6,   135, 205, 140, 164, 10,  189, 136, 130, 244, 1,   210, 222, 223, 247,
      1,   189, 128, 142, 203, 12,  232, 241, 180, 195, 12,  237, 228, 243, 183,
      7,   218, 155, 204, 158, 14,  235, 167, 134, 183, 6,   171, 218, 141, 128,
      3,   184, 152, 251, 187, 10,  138, 217, 169, 182, 2,   210, 140, 240, 138,
      7,   150, 156, 232, 128, 9,   209, 231, 181, 174, 14,  243, 210, 173, 34,
      220, 254, 188, 199, 14,  245, 195, 226, 124, 141, 228, 248, 228, 15,  158,
      166, 194, 150, 6,   152, 220, 238, 252, 13,  179, 132, 217, 220, 15,  213,
      168, 186, 245, 4,   241, 243, 200, 226, 10,  216, 178, 141, 137, 13,  134,
      176, 169, 179, 6,   212, 242, 197, 75,  175, 222, 238, 237, 10,  185, 143,
      171, 166, 6,   180, 198, 129, 170, 5,   159, 129, 176, 134, 11,  130, 248,
      213, 183, 12,  204, 162, 169, 238, 8,   139, 139, 145, 227, 15,  232, 239,
      206, 163, 3,   145, 157, 143, 183, 10,  250, 190, 179, 189, 3,   185, 138,
      211, 215, 3,   179, 147, 158, 165, 13,  231, 226, 199, 245, 11,  147, 179,
      178, 190, 1,   208, 217, 154, 195, 14,  226, 194, 229, 142, 8,   198, 175,
      184, 231, 4,   199, 198, 191, 24,  184, 134, 226, 231, 10,  152, 208, 222,
      254, 1,   134, 167, 234, 69,  175, 214, 177, 218, 3,   218, 234, 128, 162,
      3,   160, 177, 187, 166, 3,   201, 210, 191, 159, 13,  240, 152, 160, 250,
      6,   235, 130, 214, 240, 11,  128, 237, 251, 245, 225, 3,   245, 237, 174,
      230, 9,   252, 148, 229, 201, 7,   152, 148, 165, 153, 7,   223, 238, 242,
      16,  156, 212, 237, 228, 7,   139, 153, 178, 37,  219, 217, 217, 172, 15,
      178, 168, 128, 199, 9,   236, 189, 144, 226, 12,  214, 248, 134, 230, 13,
      163, 252, 247, 55,  239, 252, 149, 196, 3,   230, 159, 214, 139, 6,   132,
      200, 241, 154, 2,   129, 231, 153, 173, 12,  235, 131, 255, 157, 2,   246,
      190, 145, 55,  205, 201, 240, 141, 9,   188, 202, 199, 189, 6,   196, 235,
      245, 205, 11,  249, 253, 241, 223, 6,   187, 250, 137, 241, 9,   133, 135,
      168, 146, 8,   132, 248, 219, 156, 8,   132, 241, 185, 4,   198, 209, 147,
      129, 11,  229, 192, 218, 178, 4,   199, 210, 138, 166, 13,  244, 148, 172,
      141, 2,   194, 215, 171, 220, 1,   192, 248, 230, 128, 2,   238, 167, 209,
      222, 11,  240, 200, 227, 150, 11,  182, 217, 170, 158, 14,  223, 223, 254,
      201, 10,  140, 164, 245, 175, 2,   178, 140, 153, 102, 139, 145, 181, 242,
      8,   188, 154, 214, 154, 15,  149, 187, 204, 192, 2,   223, 153, 219, 51,
      245, 236, 130, 133, 5,   197, 138, 169, 80,  243, 162, 164, 167, 1,   206,
      232, 180, 137, 12,  180, 191, 164, 226, 8,   162, 180, 231, 222, 13,  184,
      143, 156, 74,  134, 230, 248, 219, 10,  203, 156, 149, 205, 1,   219, 205,
      173, 167, 10,  174, 146, 180, 141, 7,   214, 231, 229, 231, 10,  181, 246,
      174, 180, 15,  236, 175, 222, 241, 7,   191, 150, 253, 209, 8,   233, 139,
      167, 149, 13,  142, 249, 150, 223, 10,  220, 151, 135, 222, 5,   138, 228,
      133, 131, 4,   232, 183, 160, 245, 3,   157, 219, 209, 200, 5,   159, 242,
      142, 148, 13,  241, 207, 248, 177, 11,  179, 226, 169, 150, 13,  169, 201,
      212, 218, 8,   172, 214, 220, 31,  155, 173, 251, 231, 12,  221, 150, 137,
      174, 15,  146, 137, 251, 255, 14,  245, 216, 203, 138, 1,   163, 170, 194,
      133, 12,  205, 157, 188, 131, 12,  184, 220, 161, 97,  162, 240, 190, 243,
      2,   213, 134, 147, 251, 3,   178, 160, 193, 188, 14,  214, 153, 226, 140,
      12,  191, 208, 235, 174, 13,  138, 188, 204, 236, 11,  214, 135, 129, 235,
      10,  198, 242, 226, 128, 11,  154, 219, 163, 144, 7,   236, 134, 217, 197,
      2,   181, 248, 144, 157, 8,   150, 174, 195, 224, 12,  156, 247, 234, 192,
      7,   156, 206, 174, 246, 2,   181, 214, 138, 155, 1,   246, 242, 141, 152,
      9,   207, 157, 139, 243, 1,   153, 135, 158, 249, 6,   162, 129, 144, 170,
      13,  227, 162, 245, 246, 1,   130, 237, 192, 208, 13,  187, 165, 153, 215,
      8,   178, 141, 203, 163, 15,  172, 179, 180, 172, 10,  206, 200, 237, 194,
      12,  129, 235, 165, 143, 7,   129, 230, 217, 244, 8,   223, 249, 152, 233,
      2,   160, 224, 204, 187, 10,  167, 211, 138, 247, 7,   207, 204, 131, 200,
      1,   207, 240, 161, 219, 9,   219, 213, 129, 183, 11,  186, 163, 243, 198,
      13,  217, 197, 175, 218, 8,   195, 228, 209, 137, 1,   149, 253, 193, 190,
      8,   216, 231, 225, 190, 15,  244, 168, 191, 152, 6,   180, 210, 162, 198,
      9,   172, 159, 195, 158, 9,   173, 151, 226, 34,  143, 231, 162, 212, 6,
      250, 171, 192, 187, 11,  229, 212, 155, 156, 9,   234, 159, 165, 254, 8,
      180, 154, 227, 197, 3,   175, 158, 214, 235, 8,   164, 157, 160, 130, 4,
      158, 223, 243, 254, 10,  178, 236, 213, 212, 12,  194, 173, 185, 159, 6,
      184, 214, 195, 172, 5,   128, 161, 203, 183, 194, 10,  207, 218, 209, 222,
      12,  136, 166, 226, 224, 3,   148, 153, 145, 214, 4,   164, 178, 253, 243,
      4,   173, 162, 237, 129, 4,   236, 134, 193, 169, 14,  140, 234, 164, 190,
      7,   211, 148, 252, 223, 8,   213, 149, 180, 170, 12,  194, 182, 191, 205,
      15,  206, 233, 190, 211, 2,   241, 136, 223, 152, 12,  184, 185, 231, 176,
      10,  201, 166, 182, 211, 4,   209, 201, 205, 235, 1,   141, 184, 205, 173,
      15,  244, 222, 218, 113, 175, 190, 179, 140, 4,   234, 232, 231, 183, 8,
      174, 167, 140, 130, 9,   169, 157, 136, 196, 14,  187, 244, 242, 135, 7,
      248, 183, 178, 253, 10,  135, 216, 152, 153, 15,  226, 223, 172, 161, 11,
      236, 183, 231, 216, 3,   183, 169, 209, 137, 13,  130, 219, 233, 167, 4,
      168, 132, 197, 161, 7,   164, 146, 152, 207, 4,   239, 229, 147, 130, 2,
      172, 156, 244, 148, 6,   171, 253, 185, 213, 4,   184, 181, 241, 207, 1,
      144, 250, 219, 222, 1,   213, 189, 209, 177, 10,  207, 252, 251, 239, 9,
      181, 132, 203, 147, 6,   159, 135, 181, 18,  215, 252, 202, 234, 7,   207,
      215, 210, 222, 12,  195, 211, 185, 171, 14,  178, 132, 165, 140, 9,   139,
      160, 171, 250, 1,   248, 176, 203, 170, 14,  148, 184, 131, 141, 4,   158,
      226, 204, 197, 3,   215, 157, 148, 219, 15,  228, 206, 156, 132, 3,   234,
      206, 202, 231, 8,   232, 177, 135, 215, 10,  173, 253, 176, 172, 5,   144,
      188, 170, 229, 14,  200, 165, 144, 50,  198, 153, 206, 184, 3,   150, 128,
      128, 141, 14,  155, 221, 221, 199, 12,  229, 199, 160, 156, 3,   176, 172,
      200, 97,  222, 255, 134, 158, 9,   233, 155, 199, 193, 14,  146, 216, 186,
      250, 13,  156, 152, 194, 212, 8,   254, 190, 240, 232, 2,   178, 210, 194,
      160, 3,   142, 216, 141, 184, 10,  173, 210, 214, 187, 2,   161, 211, 201,
      143, 5,   213, 149, 210, 222, 15,  134, 165, 184, 171, 9,   211, 175, 153,
      241, 9,   227, 201, 184, 213, 1,   173, 225, 213, 176, 13,  143, 228, 200,
      151, 12,  224, 224, 224, 186, 8,   188, 153, 234, 254, 7,   137, 188, 238,
      186, 8,   166, 236, 135, 180, 13,  202, 174, 133, 194, 13,  179, 243, 158,
      193, 13,  210, 173, 128, 149, 2,   208, 216, 158, 168, 13,  205, 251, 152,
      230, 3,   245, 245, 254, 163, 9,   211, 243, 234, 164, 9,   173, 221, 221,
      215, 4,   146, 220, 209, 198, 1,   235, 237, 170, 130, 7,   181, 227, 149,
      141, 2,   170, 245, 149, 217, 5,   153, 179, 215, 195, 14,  249, 206, 140,
      148, 1,   247, 200, 219, 152, 15,  165, 228, 197, 152, 11,  234, 192, 242,
      244, 6,   217, 229, 173, 147, 3,   216, 209, 206, 189, 7,   165, 171, 221,
      214, 2,   151, 250, 211, 138, 2,   144, 169, 182, 176, 13,  179, 254, 191,
      225, 3,   244, 147, 218, 212, 3,   129, 187, 183, 253, 10,  218, 149, 188,
      168, 10,  223, 241, 149, 129, 8,   209, 128, 150, 126, 153, 139, 195, 131,
      6,   201, 208, 246, 221, 1,   194, 165, 175, 173, 5,   197, 133, 207, 196,
      2,   192, 211, 129, 210, 7,   211, 147, 163, 220, 9,   173, 191, 188, 152,
      1,   169, 242, 205, 20,  167, 133, 213, 211, 2,   213, 226, 129, 166, 12,
      186, 202, 155, 203, 5,   180, 251, 220, 174, 12,  145, 228, 247, 146, 12,
      196, 151, 247, 184, 10,  217, 233, 238, 147, 6,   149, 174, 181, 128, 13,
      128, 246, 173, 207, 15,  200, 162, 139, 103, 237, 199, 220, 252, 7,   208,
      201, 133, 231, 3,   140, 148, 223, 137, 5,   128, 242, 251, 140, 228, 11,
      214, 205, 158, 228, 2,   147, 190, 212, 138, 4,   228, 228, 253, 154, 9,
      146, 191, 248, 187, 8,   168, 200, 246, 160, 4,   224, 168, 147, 211, 11,
      153, 197, 133, 229, 5,   176, 131, 167, 203, 6,   213, 183, 189, 178, 10,
      185, 222, 229, 183, 5,   171, 185, 208, 162, 15,  203, 130, 137, 201, 6,
      236, 152, 138, 176, 1,   221, 200, 169, 183, 11,  237, 230, 219, 108, 152,
      247, 239, 145, 14,  242, 220, 245, 148, 6,   183, 147, 218, 144, 11,  236,
      190, 230, 197, 1,   253, 147, 205, 165, 10,  181, 130, 138, 249, 10,  193,
      135, 148, 142, 10,  232, 132, 254, 163, 4,   244, 153, 241, 197, 13,  251,
      150, 230, 242, 10,  211, 255, 182, 243, 3,   247, 137, 150, 236, 5,   137,
      168, 208, 161, 10,  192, 178, 137, 210, 13,  192, 158, 177, 203, 7,   237,
      221, 208, 153, 4,   180, 129, 195, 139, 4,   195, 220, 254, 129, 8,   235,
      249, 252, 142, 2,   171, 195, 208, 162, 12,  205, 185, 192, 166, 9,   208,
      205, 169, 160, 10,  156, 148, 150, 185, 2,   246, 165, 207, 129, 12,  145,
      207, 129, 130, 15,  253, 209, 184, 133, 11,  247, 226, 200, 185, 9,   193,
      147, 150, 128, 8,   251, 208, 155, 45,  251, 142, 248, 144, 15,  174, 199,
      157, 236, 12,  206, 215, 156, 131, 14,  224, 242, 193, 145, 9,   194, 231,
      136, 243, 7,   135, 188, 221, 220, 10,  252, 138, 172, 180, 15,  222, 245,
      235, 161, 2,   147, 195, 191, 195, 7,   191, 205, 163, 247, 3,   237, 172,
      239, 187, 6,   137, 141, 231, 233, 10,  246, 253, 140, 184, 5,   191, 252,
      199, 190, 13,  235, 212, 206, 220, 8,   163, 219, 233, 232, 13,  166, 129,
      242, 168, 12,  131, 217, 184, 209, 7,   138, 139, 223, 216, 8,   186, 152,
      149, 207, 6,   229, 191, 144, 149, 8,   223, 167, 204, 251, 1,   181, 240,
      166, 200, 9,   194, 230, 150, 122, 210, 176, 221, 179, 5,   137, 169, 225,
      196, 2,   190, 138, 243, 173, 10,  155, 224, 148, 154, 15,  180, 176, 218,
      153, 2,   194, 220, 179, 239, 3,   209, 243, 151, 171, 1,   135, 192, 192,
      129, 3,   154, 145, 158, 166, 8,   174, 159, 201, 207, 1,   134, 247, 247,
      152, 5,   169, 139, 159, 171, 3,   173, 170, 159, 244, 15,  201, 205, 215,
      223, 9,   227, 214, 226, 134, 14,  237, 245, 216, 153, 1,   207, 208, 244,
      63,  136, 146, 237, 215, 2,   131, 173, 129, 187, 4,   150, 204, 222, 185,
      6,   243, 177, 246, 252, 5,   246, 173, 234, 215, 14,  207, 252, 211, 199,
      3,   177, 211, 230, 228, 5,   208, 143, 209, 191, 13,  173, 192, 232, 246,
      12,  132, 255, 207, 139, 14,  171, 129, 141, 173, 7,   255, 222, 227, 255,
      12,  155, 193, 184, 244, 14,  171, 144, 214, 163, 1,   241, 232, 221, 228,
      15,  188, 160, 210, 226, 13,  189, 190, 189, 5,   204, 252, 250, 234, 10,
      228, 161, 153, 190, 9,   210, 208, 187, 214, 7,   198, 154, 214, 242, 9,
      197, 163, 254, 27,  220, 251, 130, 172, 2,   193, 147, 157, 255, 14,  242,
      131, 138, 180, 14,  200, 239, 175, 239, 5,   181, 157, 238, 152, 1,   203,
      211, 156, 220, 10,  210, 166, 223, 241, 2,   214, 243, 250, 244, 10,  238,
      200, 226, 216, 9,   168, 140, 235, 228, 14,  149, 176, 161, 188, 9,   180,
      224, 247, 138, 11,  168, 159, 157, 226, 7,   216, 226, 212, 131, 5,   158,
      162, 174, 190, 2,   147, 131, 155, 194, 4,   227, 156, 248, 169, 14,  210,
      216, 130, 142, 14,  233, 234, 248, 230, 13,  146, 190, 216, 248, 9,   128,
      173, 190, 149, 182, 11,  254, 210, 132, 152, 8,   211, 239, 231, 248, 9,
      132, 255, 247, 168, 7,   149, 224, 145, 136, 14,  162, 220, 148, 134, 6,
      204, 244, 192, 159, 8,   178, 160, 245, 237, 15,  193, 167, 249, 251, 5,
      238, 159, 153, 199, 9,   228, 225, 136, 225, 9,   147, 221, 134, 220, 7,
      249, 129, 250, 131, 5,   255, 249, 227, 129, 15,  183, 246, 177, 190, 10,
      217, 182, 196, 128, 6,   136, 242, 159, 173, 1,   244, 128, 137, 210, 10,
      154, 223, 230, 173, 7,   193, 171, 203, 220, 9,   193, 222, 146, 129, 2,
      159, 229, 247, 153, 1,   205, 139, 189, 204, 13,  181, 152, 211, 186, 3,
      252, 181, 234, 182, 4,   230, 212, 233, 169, 13,  134, 211, 157, 165, 1,
      218, 165, 218, 239, 4,   148, 140, 245, 130, 11,  197, 152, 165, 199, 2,
      235, 219, 158, 232, 9,   187, 231, 171, 149, 12,  134, 191, 248, 157, 3,
      219, 140, 128, 208, 1,   181, 140, 225, 226, 15,  234, 239, 208, 170, 10,
      166, 152, 192, 138, 15,  237, 204, 242, 197, 12,  230, 224, 210, 68,  128,
      170, 249, 251, 10,  193, 202, 171, 142, 7,   235, 192, 224, 175, 14,  147,
      243, 214, 94,  165, 202, 243, 157, 6,   192, 178, 204, 211, 8,   242, 240,
      207, 231, 4,   251, 234, 238, 218, 1,   207, 227, 224, 149, 4,   155, 215,
      210, 203, 2,   164, 248, 235, 166, 6,   226, 234, 165, 222, 13,  228, 197,
      249, 231, 14,  169, 172, 201, 163, 14,  149, 206, 208, 159, 15,  178, 216,
      205, 227, 15,  210, 228, 223, 220, 5,   161, 214, 153, 136, 11,  181, 178,
      246, 212, 7,   128, 131, 238, 218, 13,  138, 156, 141, 139, 15,  134, 187,
      137, 234, 4,   152, 215, 181, 142, 6,   160, 185, 166, 193, 13,  213, 145,
      204, 240, 13,  190, 164, 216, 231, 13,  251, 208, 176, 231, 4,   243, 160,
      187, 150, 5,   235, 251, 246, 205, 3,   142, 232, 229, 222, 5,   227, 251,
      238, 161, 12,  224, 198, 250, 176, 3,   187, 162, 200, 223, 5,   199, 133,
      234, 181, 3,   167, 160, 247, 232, 4,   174, 198, 216, 180, 15,  144, 251,
      131, 187, 10,  161, 171, 169, 190, 9,   223, 175, 171, 171, 4,   141, 165,
      211, 128, 5,   139, 239, 131, 173, 3,   211, 163, 253, 45,  212, 199, 216,
      226, 11,  137, 216, 228, 198, 3,   216, 209, 199, 233, 3,   249, 144, 225,
      146, 1,   216, 184, 225, 218, 9,   197, 219, 219, 247, 12,  214, 227, 243,
      240, 14,  221, 155, 244, 141, 4,   239, 249, 179, 130, 4,   161, 187, 191,
      135, 3,   245, 241, 237, 241, 12,  194, 211, 209, 238, 5,   252, 210, 135,
      149, 1,   134, 241, 220, 170, 12,  175, 208, 242, 229, 9,   181, 144, 172,
      202, 7,   170, 195, 174, 180, 5,   198, 153, 178, 158, 6,   146, 142, 204,
      119, 137, 185, 250, 204, 10,  208, 190, 240, 166, 1,   138, 183, 212, 226,
      3,   241, 240, 245, 140, 15,  250, 184, 161, 117, 198, 194, 173, 133, 15,
      135, 247, 179, 180, 11,  158, 233, 195, 162, 2,   209, 143, 142, 203, 13,
      156, 215, 224, 192, 5,   228, 223, 167, 163, 6,   253, 160, 223, 182, 5,
      178, 178, 223, 147, 5,   150, 180, 221, 189, 10,  168, 197, 173, 169, 6,
      166, 146, 252, 254, 15,  154, 211, 198, 238, 6,   182, 166, 227, 223, 3,
      152, 209, 173, 192, 3,   147, 255, 130, 153, 9,   152, 159, 128, 195, 7,
      204, 199, 174, 227, 8,   149, 133, 142, 33,  236, 185, 160, 136, 14,  154,
      137, 143, 236, 7,   246, 149, 237, 166, 3,   150, 184, 224, 232, 3,   204,
      220, 171, 245, 15,  128, 131, 146, 236, 219, 10,  168, 253, 226, 198, 3,
      196, 185, 159, 245, 14,  246, 239, 172, 207, 7,   172, 188, 238, 233, 13,
      193, 158, 247, 192, 10,  178, 146, 230, 233, 8,   143, 221, 252, 145, 5,
      169, 173, 160, 149, 7,   141, 199, 235, 35,  225, 224, 227, 213, 7,   233,
      249, 164, 132, 11,  255, 158, 248, 254, 2,   248, 200, 154, 176, 3,   168,
      248, 134, 165, 8,   145, 177, 231, 188, 10,  189, 223, 182, 129, 7,   246,
      146, 219, 62,  185, 190, 133, 217, 3,   228, 177, 227, 170, 1,   230, 175,
      223, 120, 150, 130, 206, 166, 5,   223, 216, 157, 168, 1,   225, 151, 175,
      248, 5,   140, 228, 227, 235, 7,   243, 148, 219, 250, 3,   250, 215, 234,
      130, 1,   191, 146, 221, 133, 8,   220, 223, 135, 100, 233, 148, 197, 224,
      11,  164, 203, 178, 134, 9,   170, 133, 159, 133, 8,   162, 189, 239, 68,
      144, 186, 204, 211, 6,   167, 218, 219, 144, 2,   208, 155, 181, 237, 2,
      253, 223, 151, 180, 15,  137, 132, 173, 135, 7,   172, 137, 239, 146, 13,
      250, 140, 255, 211, 11,  231, 134, 228, 145, 3,   149, 220, 253, 168, 10,
      236, 163, 149, 221, 10,  247, 151, 236, 190, 6,   166, 210, 238, 52,  192,
      248, 168, 229, 9,   237, 182, 227, 199, 12,  189, 199, 195, 216, 12,  178,
      236, 220, 158, 2,   247, 182, 235, 221, 14,  219, 148, 216, 159, 15,  158,
      234, 200, 167, 2,   184, 132, 251, 232, 2,   138, 227, 158, 204, 14,  225,
      192, 227, 165, 8,   130, 214, 149, 173, 13,  210, 140, 161, 181, 9,   222,
      217, 168, 158, 10,  220, 222, 238, 137, 10,  237, 248, 184, 57,  167, 213,
      169, 132, 5,   236, 173, 141, 25,  131, 201, 181, 180, 4,   133, 182, 179,
      134, 14,  243, 180, 195, 169, 11,  145, 153, 139, 242, 14,  210, 148, 136,
      230, 2,   174, 147, 246, 185, 7,   185, 230, 252, 230, 10,  247, 210, 139,
      242, 13,  187, 227, 199, 158, 14,  186, 209, 178, 166, 8,   148, 174, 212,
      154, 6,   193, 139, 246, 160, 4,   180, 129, 135, 190, 7,   253, 202, 252,
      194, 1,   145, 192, 198, 192, 2,   136, 201, 194, 165, 5,   238, 198, 216,
      222, 8,   148, 132, 194, 231, 2,   179, 212, 226, 152, 13,  216, 203, 190,
      81,  241, 158, 205, 205, 3,   153, 250, 248, 251, 11,  157, 223, 163, 229,
      11,  160, 240, 198, 156, 13,  155, 254, 151, 138, 14,  219, 233, 172, 254,
      4,   186, 194, 189, 227, 4,   169, 243, 181, 201, 14,  161, 158, 146, 201,
      3,   135, 139, 242, 206, 4,   222, 141, 186, 201, 11,  247, 182, 166, 198,
      12,  141, 168, 155, 172, 4,   206, 218, 254, 175, 4,   140, 213, 159, 204,
      7,   214, 128, 160, 215, 9,   253, 242, 237, 147, 8,   162, 233, 151, 181,
      5,   183, 223, 151, 21,  132, 164, 206, 242, 1,   179, 227, 155, 165, 11,
      189, 251, 195, 212, 3,   154, 195, 137, 190, 6,   129, 212, 227, 177, 4,
      185, 141, 235, 183, 7,   233, 220, 229, 174, 4,   215, 138, 248, 25,  161,
      210, 193, 241, 14,  239, 201, 231, 152, 12,  240, 169, 204, 169, 14,  228,
      195, 196, 225, 6,   250, 159, 144, 234, 1,   167, 238, 191, 142, 11,  202,
      222, 151, 207, 9,   205, 219, 185, 142, 3,   230, 224, 187, 235, 5,   194,
      167, 210, 173, 7,   235, 250, 253, 178, 12,  239, 128, 215, 198, 13,  130,
      141, 191, 238, 3,   173, 252, 172, 217, 14,  129, 203, 164, 16,  191, 131,
      153, 141, 8,   133, 200, 131, 240, 15,  173, 165, 172, 11,  182, 247, 244,
      165, 9,   128, 238, 232, 219, 37,  214, 148, 220, 206, 10,  199, 154, 167,
      130, 1,   188, 191, 233, 235, 9,   167, 131, 215, 154, 5,   133, 224, 241,
      202, 1,   237, 213, 192, 223, 4,   160, 202, 178, 132, 10,  248, 217, 142,
      133, 12,  199, 164, 231, 189, 5,   240, 129, 134, 189, 6,   173, 135, 204,
      176, 15,  164, 142, 214, 137, 8,   208, 169, 163, 251, 15,  196, 171, 247,
      187, 14,  230, 177, 251, 130, 13,  200, 234, 146, 173, 4,   252, 218, 210,
      212, 10,  206, 187, 236, 129, 5,   165, 161, 220, 171, 11,  135, 129, 179,
      205, 2,   240, 251, 134, 254, 3,   136, 185, 186, 220, 10,  230, 142, 156,
      211, 1,   215, 243, 241, 179, 12,  141, 140, 140, 166, 5,   136, 183, 213,
      220, 14,  182, 213, 134, 202, 10,  177, 197, 170, 230, 6,   210, 133, 203,
      128, 14,  145, 196, 176, 139, 5,   191, 143, 140, 133, 11,  247, 155, 221,
      233, 10,  131, 192, 238, 143, 3,   194, 196, 146, 129, 9,   245, 183, 142,
      133, 6,   200, 197, 143, 185, 2,   133, 144, 194, 144, 4,   149, 202, 240,
      36,  230, 214, 182, 211, 5,   254, 227, 217, 246, 2,   128, 164, 220, 255,
      5,   132, 138, 149, 153, 6,   200, 139, 167, 97,  203, 137, 179, 195, 2,
      141, 176, 199, 134, 9,   165, 244, 225, 254, 3,   136, 180, 252, 193, 3,
      200, 165, 159, 207, 12,  147, 222, 142, 148, 5,   191, 146, 228, 191, 9,
      213, 255, 236, 152, 13,  132, 240, 164, 174, 2,   204, 152, 214, 3,   251,
      240, 222, 248, 10,  219, 208, 211, 189, 15,  175, 252, 221, 88,  182, 234,
      154, 107, 208, 190, 199, 159, 2,   209, 139, 150, 182, 13,  212, 219, 146,
      154, 15,  221, 178, 221, 188, 11,  148, 200, 197, 17,  129, 218, 170, 253,
      11,  164, 244, 228, 252, 2,   220, 175, 146, 195, 15,  141, 223, 154, 232,
      9,   227, 186, 130, 220, 8,   153, 157, 145, 139, 12,  233, 140, 173, 183,
      12,  223, 255, 155, 139, 13,  162, 238, 129, 242, 11,  252, 162, 211, 191,
      2,   228, 182, 210, 101, 171, 202, 191, 167, 11,  247, 189, 170, 255, 3,
      217, 150, 238, 215, 10,  173, 188, 234, 177, 5,   166, 139, 147, 132, 12,
      230, 216, 153, 200, 3,   182, 202, 167, 210, 12,  222, 169, 137, 180, 7,
      253, 249, 181, 197, 2,   198, 205, 156, 192, 12,  168, 135, 243, 185, 2,
      138, 158, 139, 159, 11,  138, 210, 248, 255, 14,  157, 141, 161, 207, 9,
      218, 206, 244, 191, 4,   222, 169, 188, 238, 5,   133, 211, 152, 218, 14,
      248, 191, 242, 250, 13,  217, 188, 239, 231, 14,  137, 198, 135, 144, 1,
      231, 227, 214, 168, 7,   128, 136, 152, 103, 150, 151, 161, 171, 12,  251,
      222, 212, 229, 4,   154, 193, 182, 62,  251, 246, 205, 142, 3,   132, 140,
      242, 166, 14,  165, 231, 192, 250, 6,   136, 154, 230, 163, 1,   230, 228,
      246, 182, 3,   187, 215, 217, 177, 8,   137, 171, 251, 15,  211, 128, 230,
      244, 15,  160, 146, 188, 255, 4,   204, 242, 150, 194, 1,   128, 184, 177,
      139, 14,  139, 209, 245, 134, 11,  241, 167, 181, 139, 5,   159, 129, 160,
      74,  159, 200, 133, 222, 5,   157, 204, 165, 199, 10,  193, 159, 169, 151,
      11,  205, 219, 226, 134, 9,   197, 252, 179, 128, 14,  230, 250, 244, 215,
      5,   207, 138, 239, 212, 14,  237, 216, 191, 199, 15,  250, 250, 198, 148,
      9,   212, 228, 174, 146, 15,  221, 137, 207, 196, 3,   146, 165, 245, 220,
      13,  157, 249, 149, 228, 5,   185, 219, 188, 185, 8,   212, 150, 240, 218,
      15,  128, 211, 229, 202, 129, 14,  132, 225, 178, 226, 1,   251, 195, 132,
      66,  210, 245, 154, 234, 5,   145, 183, 146, 177, 9,   218, 223, 128, 170,
      13,  238, 227, 168, 197, 11,  189, 225, 206, 179, 6,   221, 169, 239, 193,
      4,   194, 207, 170, 203, 7,   163, 206, 232, 197, 1,   160, 130, 131, 160,
      4,   139, 146, 149, 173, 10,  140, 240, 243, 180, 4,   231, 180, 202, 245,
      9,   146, 250, 195, 157, 1,   233, 199, 188, 210, 15,  253, 222, 137, 142,
      10,  174, 245, 231, 20,  219, 156, 185, 201, 5,   139, 137, 230, 135, 1,
      236, 207, 146, 138, 4,   149, 174, 164, 221, 4,   158, 227, 224, 210, 7,
      206, 150, 186, 244, 9,   156, 183, 159, 142, 13,  176, 152, 163, 193, 8,
      190, 229, 232, 155, 7,   234, 132, 236, 132, 9,   242, 254, 204, 134, 14,
      143, 226, 253, 180, 2,   138, 226, 214, 218, 2,   199, 228, 210, 186, 12,
      147, 179, 230, 254, 5,   249, 135, 247, 147, 10,  148, 253, 186, 214, 12,
      250, 240, 173, 159, 14,  162, 215, 177, 42,  162, 142, 248, 135, 3,   196,
      143, 150, 150, 10,  236, 221, 178, 147, 7,   165, 248, 197, 136, 7,   199,
      152, 158, 228, 13,  229, 215, 242, 194, 7,   145, 249, 246, 181, 13,  134,
      191, 196, 245, 3,   161, 251, 235, 200, 14,  255, 232, 248, 228, 10,  170,
      188, 227, 177, 14,  212, 202, 144, 143, 13,  199, 230, 234, 155, 10,  247,
      239, 142, 167, 6,   197, 129, 192, 235, 2,   207, 229, 194, 237, 12,  228,
      239, 211, 136, 3,   199, 135, 194, 244, 4,   167, 137, 158, 132, 15,  208,
      199, 176, 183, 2,   161, 181, 218, 155, 11,  218, 235, 160, 207, 5,   250,
      181, 244, 252, 9,   197, 130, 193, 168, 1,   153, 235, 181, 253, 2,   203,
      245, 229, 255, 11,  134, 136, 148, 249, 8,   179, 174, 133, 187, 8,   145,
      212, 156, 196, 7,   163, 222, 227, 236, 11,  242, 171, 200, 143, 12,  185,
      225, 231, 211, 15,  135, 230, 213, 153, 6,   254, 187, 227, 167, 2,   147,
      191, 160, 185, 12,  177, 145, 137, 133, 1,   241, 244, 217, 231, 3,   225,
      213, 246, 253, 11,  138, 185, 169, 229, 8,   129, 248, 228, 155, 4,   150,
      208, 194, 129, 13,  149, 233, 140, 159, 7,   149, 223, 199, 33,  153, 214,
      176, 117, 175, 193, 163, 144, 9,   135, 207, 150, 12,  216, 138, 151, 55,
      233, 245, 225, 219, 8,   215, 194, 201, 214, 6,   235, 254, 134, 70,  251,
      142, 174, 209, 12,  215, 218, 132, 174, 4,   209, 177, 189, 144, 3,   247,
      136, 205, 212, 8,   152, 220, 178, 208, 5,   183, 146, 202, 149, 6,   248,
      229, 196, 211, 12,  226, 191, 237, 227, 7,   234, 157, 195, 196, 4,   203,
      147, 213, 156, 1,   245, 161, 241, 97,  186, 245, 223, 246, 8,   170, 241,
      234, 188, 8,   171, 155, 201, 168, 8,   193, 168, 145, 142, 10,  254, 183,
      192, 202, 14,  137, 175, 147, 223, 9,   176, 133, 131, 166, 12,  211, 168,
      155, 225, 4,   197, 193, 255, 204, 8,   154, 208, 144, 165, 1,   134, 190,
      143, 217, 11,  148, 242, 203, 237, 11,  161, 142, 172, 215, 3,   166, 203,
      240, 162, 6,   200, 195, 186, 162, 7,   198, 211, 223, 252, 15,  132, 160,
      226, 204, 15,  158, 187, 167, 222, 6,   174, 214, 139, 220, 9,   130, 243,
      221, 206, 6,   190, 217, 211, 145, 4,   160, 255, 142, 201, 5,   201, 166,
      217, 174, 7,   240, 197, 130, 214, 7,   216, 133, 220, 184, 3,   241, 148,
      192, 185, 6,   213, 181, 240, 210, 2,   137, 194, 206, 172, 5,   221, 189,
      134, 241, 10,  128, 180, 234, 178, 219, 13,  203, 213, 182, 247, 10,  172,
      229, 222, 178, 15,  188, 154, 206, 196, 12,  240, 136, 172, 156, 11,  165,
      151, 164, 200, 7,   189, 152, 225, 146, 7,   214, 167, 205, 147, 4,   216,
      175, 130, 230, 10,  243, 162, 145, 154, 7,   155, 169, 190, 182, 6,   255,
      212, 152, 251, 6,   147, 152, 160, 237, 2,   170, 228, 233, 210, 13,  166,
      255, 247, 207, 14,  238, 175, 242, 171, 9,   174, 241, 193, 193, 4,   245,
      210, 147, 167, 14,  151, 233, 199, 154, 1,   193, 184, 194, 249, 9,   216,
      255, 201, 246, 10,  138, 198, 240, 208, 5,   187, 230, 137, 145, 1,   200,
      237, 144, 115, 131, 149, 167, 201, 15,  249, 130, 240, 202, 5,   141, 220,
      198, 233, 3,   216, 165, 204, 210, 12,  176, 166, 249, 207, 4,   244, 158,
      162, 140, 8,   174, 153, 181, 253, 14,  249, 157, 148, 130, 10,  178, 203,
      201, 162, 4,   161, 215, 176, 137, 3,   164, 232, 198, 200, 15,  141, 189,
      153, 206, 6,   148, 138, 219, 252, 12,  147, 134, 206, 210, 9,   214, 186,
      141, 183, 10,  235, 192, 204, 245, 10,  155, 177, 148, 174, 7,   246, 150,
      200, 167, 15,  134, 228, 212, 210, 7,   128, 198, 173, 133, 10,  173, 148,
      155, 170, 4,   131, 242, 205, 148, 14,  154, 220, 156, 236, 11,  213, 150,
      219, 145, 4,   171, 231, 199, 224, 12,  190, 139, 161, 155, 3,   136, 151,
      199, 129, 9,   182, 161, 156, 237, 1,   218, 151, 248, 132, 13,  201, 207,
      164, 115, 190, 137, 205, 255, 11,  191, 198, 251, 165, 10,  234, 205, 249,
      181, 3,   172, 185, 218, 244, 14,  134, 171, 214, 151, 9,   152, 245, 182,
      215, 10,  204, 161, 209, 196, 14,  180, 134, 204, 240, 4,   242, 196, 170,
      185, 13,  156, 255, 134, 178, 14,  203, 145, 211, 216, 3,   190, 148, 160,
      180, 14,  189, 162, 214, 209, 10,  238, 176, 239, 248, 15,  151, 163, 176,
      168, 5,   152, 247, 207, 238, 14,  181, 238, 168, 251, 8,   181, 189, 202,
      33,  232, 239, 229, 226, 5,   133, 156, 212, 180, 4,   224, 169, 249, 216,
      4,   198, 245, 205, 147, 8,   231, 232, 149, 230, 8,   243, 161, 191, 162,
      3,   194, 189, 237, 227, 15,  223, 185, 161, 232, 4,   153, 233, 249, 155,
      8,   240, 147, 199, 249, 5,   135, 205, 250, 160, 11,  252, 183, 238, 210,
      10,  244, 146, 156, 160, 5,   196, 252, 142, 22,  191, 148, 222, 231, 11,
      182, 201, 163, 219, 13,  199, 238, 233, 179, 4,   180, 199, 255, 249, 4,
      254, 237, 180, 213, 2,   211, 221, 157, 151, 7,   178, 192, 158, 241, 13,
      133, 212, 252, 51,  146, 221, 241, 177, 7,   137, 246, 204, 171, 5,   138,
      209, 144, 231, 2,   153, 213, 230, 179, 4,   171, 244, 213, 172, 3,   191,
      201, 249, 129, 3,   184, 184, 186, 243, 11,  145, 176, 183, 103, 145, 131,
      206, 147, 14,  136, 134, 191, 173, 9,   180, 164, 241, 245, 5,   172, 133,
      212, 167, 8,   198, 162, 158, 244, 4,   232, 175, 222, 231, 12,  146, 246,
      134, 196, 8,   147, 248, 177, 230, 8,   145, 216, 180, 139, 12,  224, 254,
      191, 222, 1,   182, 145, 213, 232, 10,  178, 139, 143, 237, 9,   253, 230,
      172, 181, 13,  225, 218, 252, 132, 6,   141, 175, 159, 197, 14,  185, 222,
      237, 246, 3,   154, 184, 245, 228, 11,  193, 198, 235, 204, 10,  182, 239,
      253, 136, 15,  205, 143, 161, 211, 7,   164, 207, 235, 220, 4,   158, 235,
      183, 187, 9,   203, 201, 147, 139, 3,   169, 181, 153, 201, 11,  222, 206,
      192, 251, 12,  221, 253, 242, 152, 11,  128, 249, 190, 248, 152, 5,   151,
      199, 221, 227, 14,  209, 246, 133, 200, 7,   246, 181, 176, 131, 9,   165,
      219, 139, 171, 4,   254, 130, 187, 208, 8,   144, 221, 189, 192, 10,  163,
      146, 139, 166, 12,  231, 177, 223, 205, 9,   229, 179, 214, 227, 2,   132,
      153, 150, 154, 5,   242, 250, 159, 171, 9,   144, 228, 238, 120, 168, 206,
      130, 107, 145, 144, 235, 248, 1,   254, 218, 166, 129, 4,   237, 129, 235,
      7,   150, 199, 251, 175, 9,   252, 199, 200, 168, 9,   172, 147, 153, 151,
      5,   168, 129, 129, 188, 13,  200, 166, 192, 192, 8,   154, 184, 218, 232,
      2,   155, 202, 193, 156, 12,  182, 241, 250, 153, 13,  180, 141, 206, 141,
      6,   206, 129, 157, 153, 12,  132, 158, 212, 247, 14,  160, 135, 203, 238,
      12,  216, 173, 204, 156, 9,   166, 214, 242, 138, 14,  178, 248, 246, 135,
      1,   244, 219, 210, 155, 3,   208, 155, 189, 180, 3,   156, 189, 171, 174,
      13,  162, 161, 233, 108, 231, 134, 177, 255, 11,  216, 159, 226, 244, 2,
      130, 227, 211, 185, 6,   169, 146, 187, 143, 2,   153, 225, 150, 187, 9,
      210, 153, 211, 181, 13,  147, 216, 152, 173, 3,   246, 236, 142, 33,  222,
      140, 194, 241, 10,  171, 251, 248, 210, 11,  239, 197, 137, 242, 8,   132,
      179, 189, 209, 6,   181, 221, 179, 161, 2,   168, 172, 241, 163, 2,   203,
      241, 250, 226, 12,  184, 188, 237, 210, 8,   228, 163, 153, 234, 5,   222,
      162, 216, 142, 13,  235, 251, 186, 239, 1,   199, 133, 166, 158, 9,   134,
      241, 161, 174, 3,   183, 248, 214, 158, 7,   181, 248, 184, 143, 11,  234,
      152, 151, 169, 9,   198, 134, 159, 251, 7,   144, 176, 211, 121, 199, 255,
      166, 132, 5,   201, 243, 215, 189, 14,  213, 240, 205, 223, 10,  205, 191,
      234, 185, 9,   240, 221, 255, 234, 5,   210, 250, 179, 148, 7,   185, 162,
      155, 243, 3,   140, 197, 165, 222, 12,  150, 143, 215, 241, 13,  138, 138,
      246, 30,  236, 151, 243, 235, 12,  232, 222, 197, 223, 5,   177, 198, 228,
      194, 4,   130, 172, 242, 221, 11,  208, 235, 221, 161, 1,   254, 141, 148,
      144, 14,  168, 251, 185, 179, 9,   247, 144, 244, 178, 12,  209, 235, 151,
      183, 9,   131, 208, 184, 182, 13,  135, 245, 255, 250, 2,   173, 149, 179,
      144, 12,  135, 248, 137, 220, 10,  233, 194, 242, 248, 6,   212, 132, 219,
      149, 12,  204, 211, 128, 213, 2,   137, 232, 221, 213, 9,   253, 167, 158,
      148, 3,   230, 179, 147, 176, 13,  224, 201, 179, 191, 9,   135, 168, 142,
      253, 13,  241, 194, 141, 216, 6,   153, 214, 245, 216, 11,  195, 145, 195,
      142, 15,  242, 152, 180, 191, 11,  229, 219, 238, 220, 11,  248, 241, 183,
      229, 15,  231, 171, 213, 81,  205, 182, 151, 253, 6,   170, 162, 168, 177,
      10,  231, 205, 251, 209, 3,   253, 168, 199, 198, 12,  252, 138, 233, 210,
      8,   234, 156, 212, 168, 11,  250, 136, 144, 228, 7,   168, 238, 236, 143,
      1,   180, 204, 171, 173, 13,  180, 221, 130, 239, 4,   253, 135, 233, 166,
      9,   233, 248, 248, 182, 1,   239, 198, 243, 139, 14,  160, 215, 214, 199,
      9,   229, 211, 167, 193, 9,   247, 135, 221, 142, 9,   205, 178, 155, 150,
      3,   254, 172, 151, 215, 14,  170, 242, 195, 176, 5,   207, 226, 194, 155,
      11,  216, 223, 149, 43,  240, 135, 144, 187, 13,  139, 215, 216, 182, 15,
      135, 209, 192, 226, 6,   251, 144, 191, 169, 8,   226, 207, 136, 188, 2,
      255, 128, 205, 245, 4,   214, 222, 198, 178, 4,   128, 160, 134, 134, 201,
      1,   227, 171, 159, 179, 3,   247, 175, 155, 247, 11,  130, 208, 142, 189,
      1,   209, 251, 137, 239, 14,  196, 246, 217, 190, 2,   216, 236, 193, 250,
      4,   171, 135, 202, 174, 13,  157, 230, 183, 194, 15,  151, 155, 192, 234,
      5,   192, 160, 198, 226, 7,   246, 249, 139, 215, 1,   163, 181, 142, 210,
      4,   138, 246, 219, 179, 4,   143, 187, 253, 153, 10,  190, 131, 161, 171,
      8,   193, 185, 156, 210, 9,   221, 200, 245, 253, 2,   234, 176, 164, 194,
      4,   234, 206, 138, 90,  226, 227, 130, 184, 6,   213, 198, 190, 208, 10,
      234, 213, 248, 154, 8,   242, 195, 155, 149, 9,   248, 145, 209, 218, 3,
      162, 176, 130, 131, 9,   187, 166, 140, 162, 11,  189, 169, 188, 197, 7,
      197, 240, 176, 226, 3,   158, 243, 236, 114, 214, 252, 228, 253, 15,  237,
      210, 163, 153, 11,  253, 202, 188, 196, 3,   198, 237, 141, 147, 3,   145,
      225, 201, 203, 8,   162, 160, 216, 149, 7,   136, 166, 225, 139, 2,   230,
      144, 134, 245, 8,   213, 208, 144, 236, 5,   140, 163, 160, 219, 8,   244,
      181, 176, 132, 13,  141, 168, 184, 252, 11,  238, 218, 178, 216, 9,   254,
      164, 216, 173, 8,   233, 173, 221, 183, 10,  241, 148, 151, 179, 5,   192,
      198, 255, 228, 7,   237, 131, 167, 203, 14,  136, 194, 238, 162, 4,   233,
      138, 144, 191, 13,  184, 167, 194, 138, 5,   243, 150, 162, 137, 1,   216,
      138, 143, 176, 2,   168, 185, 251, 188, 1,   226, 135, 148, 99,  221, 188,
      199, 199, 12,  172, 200, 179, 146, 2,   215, 133, 179, 248, 1,   166, 136,
      133, 29,  179, 161, 179, 46,  149, 179, 140, 236, 9,   206, 194, 254, 173,
      9,   199, 144, 152, 197, 13,  130, 186, 169, 197, 14,  234, 210, 198, 186,
      11,  166, 157, 141, 196, 8,   135, 171, 179, 243, 10,  136, 135, 199, 243,
      1,   239, 233, 248, 191, 6,   162, 208, 228, 225, 7,   218, 186, 182, 162,
      9,   197, 229, 188, 155, 7,   252, 160, 180, 95,  152, 167, 185, 156, 15,
      169, 157, 242, 208, 6,   206, 213, 229, 223, 4,   205, 225, 209, 237, 9,
      208, 223, 194, 178, 6,   185, 206, 145, 140, 11,  162, 153, 203, 219, 11,
      191, 254, 170, 128, 15,  138, 198, 198, 231, 12,  171, 145, 216, 178, 11,
      250, 208, 197, 186, 14,  230, 209, 184, 146, 15,  136, 148, 233, 177, 2,
      224, 176, 162, 142, 12,  171, 216, 173, 150, 5,   190, 236, 246, 207, 8,
      146, 159, 218, 24,  149, 184, 172, 144, 12,  215, 138, 134, 222, 8,   230,
      138, 234, 150, 10,  132, 233, 180, 129, 7,   246, 243, 136, 179, 15,  180,
      245, 254, 253, 8,   217, 162, 135, 169, 14,  175, 223, 178, 21,  248, 184,
      135, 155, 3,   194, 214, 241, 156, 10,  150, 140, 157, 20,  245, 219, 214,
      189, 9,   195, 224, 165, 187, 6,   143, 205, 236, 165, 14,  177, 147, 215,
      253, 3,   149, 236, 255, 166, 10,  183, 205, 220, 209, 12,  135, 254, 156,
      236, 12,  253, 196, 175, 55,  159, 249, 156, 132, 7,   206, 138, 221, 129,
      1,   131, 237, 190, 202, 4,   203, 213, 202, 160, 13,  142, 239, 143, 188,
      13,  140, 181, 178, 132, 5,   196, 160, 202, 171, 13,  165, 231, 144, 248,
      3,   218, 192, 242, 222, 6,   182, 201, 241, 138, 7,   146, 141, 216, 156,
      9,   253, 199, 128, 8,   143, 152, 133, 227, 10,  161, 133, 237, 138, 5,
      155, 167, 242, 192, 11,  131, 131, 221, 252, 10,  173, 222, 208, 175, 4,
      222, 246, 234, 182, 15,  186, 223, 226, 234, 4,   128, 134, 162, 161, 166,
      8,   173, 187, 185, 226, 15,  193, 158, 170, 192, 15,  157, 143, 170, 233,
      7,   236, 143, 129, 250, 7,   170, 139, 148, 165, 15,  227, 193, 248, 149,
      1,   193, 175, 193, 161, 3,   201, 133, 138, 248, 1,   248, 238, 181, 148,
      4,   148, 149, 163, 224, 5,   140, 176, 170, 226, 1,   210, 131, 226, 211,
      11,  177, 220, 204, 252, 6,   172, 166, 215, 221, 7,   207, 206, 190, 142,
      9,   180, 178, 244, 139, 13,  205, 186, 224, 193, 5,   203, 134, 137, 186,
      9,   131, 254, 156, 161, 2,   251, 240, 204, 196, 9,   174, 198, 211, 220,
      6,   203, 229, 158, 140, 7,   141, 224, 133, 196, 2,   185, 203, 211, 149,
      14,  212, 173, 245, 172, 10,  171, 172, 253, 175, 15,  146, 215, 253, 240,
      10,  129, 217, 236, 156, 12,  196, 183, 197, 250, 9,   189, 203, 169, 148,
      11,  221, 247, 223, 173, 14,  218, 190, 182, 170, 9,   188, 230, 139, 223,
      2,   152, 181, 134, 241, 11,  137, 184, 151, 151, 11,  224, 248, 137, 176,
      12,  233, 234, 254, 228, 13,  202, 199, 164, 253, 15,  205, 152, 196, 208,
      8,   245, 131, 154, 210, 13,  173, 230, 205, 208, 6,   138, 165, 240, 198,
      14,  231, 137, 175, 129, 13,  246, 163, 168, 158, 1,   213, 246, 226, 226,
      7,   211, 214, 201, 234, 15,  173, 179, 224, 157, 10,  146, 223, 141, 141,
      14,  249, 209, 212, 241, 7,   152, 138, 146, 237, 1,   178, 175, 134, 132,
      10,  201, 203, 154, 188, 14,  148, 188, 172, 196, 4,   170, 188, 178, 162,
      9,   255, 227, 197, 169, 15,  163, 196, 216, 154, 13,  202, 217, 150, 190,
      1,   156, 213, 189, 194, 11,  192, 206, 130, 164, 3,   197, 163, 251, 148,
      5,   145, 250, 232, 230, 5,   141, 198, 246, 236, 6,   254, 143, 215, 185,
      10,  139, 223, 210, 246, 12,  158, 243, 217, 139, 12,  218, 234, 151, 205,
      5,   239, 161, 218, 141, 11,  189, 145, 169, 172, 10,  218, 224, 248, 247,
      6,   229, 195, 222, 160, 15,  220, 251, 218, 156, 8,   235, 140, 138, 160,
      5,   138, 133, 155, 195, 5,   248, 204, 241, 223, 7,   174, 250, 182, 238,
      12,  190, 151, 165, 58,  132, 155, 154, 219, 10,  160, 136, 241, 163, 8,
      145, 179, 243, 103, 156, 198, 227, 136, 12,  154, 158, 219, 228, 6,   138,
      134, 248, 146, 4,   139, 141, 198, 253, 5,   193, 167, 232, 162, 7,   227,
      182, 238, 134, 13,  153, 232, 167, 238, 13,  179, 178, 133, 162, 1,   144,
      247, 180, 57,  228, 228, 193, 222, 6,   249, 173, 245, 228, 1,   128, 173,
      168, 233, 7,   128, 193, 229, 199, 11,  222, 247, 155, 204, 8,   193, 156,
      248, 222, 5,   161, 217, 242, 184, 6,   221, 249, 182, 235, 11,  136, 232,
      167, 217, 2,   175, 247, 247, 133, 6,   190, 197, 160, 205, 12,  228, 232,
      159, 194, 14,  138, 157, 191, 164, 12,  165, 147, 184, 78,  175, 222, 170,
      114, 215, 206, 218, 235, 9,   172, 178, 244, 228, 9,   207, 184, 158, 134,
      15,  220, 242, 151, 210, 5,   135, 214, 152, 169, 10,  147, 180, 187, 157,
      15,  169, 248, 147, 144, 8,   148, 170, 166, 139, 7,   221, 178, 241, 141,
      12,  129, 229, 166, 231, 10,  167, 164, 187, 169, 3,   210, 166, 162, 164,
      9,   145, 229, 163, 141, 3,   169, 219, 228, 254, 13,  195, 154, 185, 239,
      2,   232, 144, 143, 245, 1,   182, 224, 131, 205, 4,   203, 167, 128, 129,
      2,   157, 147, 212, 142, 2,   157, 143, 162, 249, 10,  223, 183, 231, 195,
      7,   162, 136, 180, 151, 14,  244, 221, 234, 162, 7,   175, 243, 194, 204,
      12,  128, 201, 131, 148, 223, 15,  245, 173, 201, 153, 15,  179, 154, 219,
      169, 10,  146, 160, 147, 195, 12,  235, 208, 250, 180, 3,   180, 137, 229,
      254, 5,   167, 134, 245, 142, 10,  231, 130, 163, 232, 15,  235, 167, 185,
      137, 12,  179, 205, 207, 135, 8,   130, 159, 158, 216, 6,   203, 218, 229,
      194, 2,   244, 246, 217, 133, 3,   242, 158, 230, 208, 2,   221, 195, 182,
      229, 4,   214, 236, 135, 214, 10,  137, 214, 209, 246, 7,   189, 198, 158,
      200, 9,   214, 201, 139, 246, 11,  222, 180, 147, 211, 14,  146, 235, 149,
      248, 11,  173, 234, 137, 145, 14,  135, 210, 187, 187, 3,   155, 174, 179,
      178, 14,  158, 193, 253, 239, 12,  185, 178, 240, 176, 7,   129, 232, 208,
      205, 1,   244, 167, 133, 23,  236, 181, 197, 142, 8,   177, 189, 200, 176,
      12,  151, 218, 206, 138, 3,   153, 238, 153, 179, 7,   252, 224, 230, 173,
      13,  201, 177, 222, 166, 13,  158, 168, 219, 249, 3,   227, 223, 144, 175,
      8,   162, 217, 224, 176, 11,  153, 139, 169, 180, 7,   230, 211, 215, 224,
      14,  181, 189, 210, 219, 5,   170, 217, 206, 227, 3,   246, 166, 191, 147,
      2,   193, 209, 134, 215, 8,   187, 151, 160, 226, 10,  253, 149, 235, 174,
      15,  168, 167, 137, 177, 14,  175, 245, 198, 225, 10,  189, 211, 166, 129,
      4,   155, 158, 199, 212, 15,  246, 158, 210, 172, 12,  208, 222, 167, 183,
      4,   168, 151, 160, 228, 4,   254, 136, 200, 147, 3,   162, 243, 242, 217,
      11,  236, 201, 184, 252, 15,  177, 243, 230, 233, 11,  148, 179, 150, 255,
      6,   174, 237, 246, 167, 3,   209, 233, 193, 130, 12,  200, 240, 131, 186,
      2,   178, 157, 168, 198, 6,   143, 190, 249, 232, 1,   230, 135, 144, 204,
      1,   174, 150, 157, 136, 15,  183, 158, 183, 162, 6,   231, 245, 145, 241,
      14,  233, 184, 247, 249, 9,   234, 135, 237, 186, 2,   159, 177, 236, 132,
      6,   180, 190, 237, 183, 3,   171, 196, 155, 188, 2,   242, 181, 155, 167,
      8,   199, 137, 219, 202, 13,  190, 192, 159, 241, 10,  180, 160, 136, 200,
      5,   225, 221, 234, 202, 13,  139, 193, 211, 222, 12,  229, 247, 247, 254,
      7,   178, 167, 200, 189, 9,   236, 145, 224, 209, 12,  189, 181, 181, 142,
      6,   211, 255, 195, 137, 10,  231, 134, 244, 223, 2,   192, 216, 170, 244,
      3,   128, 132, 231, 150, 12,  210, 164, 150, 104, 232, 225, 252, 210, 4,
      199, 178, 132, 135, 12,  147, 224, 226, 167, 14,  135, 143, 239, 248, 3,
      190, 250, 237, 208, 10,  147, 135, 174, 171, 6,   189, 157, 158, 198, 10,
      152, 177, 153, 236, 6,   191, 223, 190, 248, 14,  186, 138, 156, 164, 2,
      149, 132, 208, 195, 5,   194, 194, 155, 218, 7,   253, 246, 182, 184, 11,
      140, 169, 156, 177, 11,  227, 184, 167, 231, 4,   172, 213, 253, 232, 8,
      240, 193, 129, 233, 10,  223, 212, 219, 155, 2,   142, 193, 243, 221, 2,
      176, 192, 237, 244, 4,   178, 239, 243, 212, 8,   210, 200, 130, 32,  231,
      254, 253, 141, 6,   218, 244, 156, 198, 11,  152, 151, 178, 192, 13,  222,
      212, 142, 204, 7,   218, 137, 247, 160, 8,   143, 221, 142, 144, 14,  129,
      184, 237, 128, 10,  203, 237, 139, 172, 3,   149, 196, 216, 182, 11,  246,
      160, 169, 231, 15,  186, 238, 171, 161, 1,   176, 176, 172, 169, 7,   137,
      191, 244, 226, 13,  184, 161, 159, 26,  128, 167, 143, 134, 3,   242, 254,
      138, 225, 13,  238, 184, 199, 235, 10,  214, 203, 144, 197, 11,  198, 220,
      212, 219, 7,   229, 145, 174, 165, 5,   128, 209, 130, 231, 167, 13,  198,
      196, 179, 211, 7,   182, 132, 201, 165, 10,  235, 153, 140, 252, 3,   217,
      181, 237, 175, 7,   161, 199, 151, 225, 11,  142, 199, 232, 132, 4,   153,
      249, 128, 186, 1,   131, 229, 136, 172, 12,  159, 136, 140, 195, 12,  243,
      153, 183, 233, 5,   145, 158, 229, 145, 2,   193, 243, 236, 167, 14,  133,
      208, 141, 205, 14,  210, 174, 175, 132, 2,   172, 189, 148, 149, 10,  255,
      234, 231, 149, 9,   214, 219, 150, 166, 5,   173, 182, 178, 187, 3,   148,
      239, 172, 131, 4,   245, 159, 177, 254, 15,  154, 239, 200, 245, 15,  182,
      184, 242, 193, 13,  183, 158, 219, 253, 3,   129, 224, 170, 184, 1,   252,
      215, 217, 217, 2,   194, 206, 254, 158, 5,   232, 208, 253, 206, 11,  132,
      164, 179, 184, 14,  186, 220, 196, 189, 10,  185, 135, 128, 185, 2,   163,
      174, 141, 221, 3,   151, 252, 208, 215, 12,  176, 237, 217, 182, 6,   129,
      224, 235, 156, 7,   146, 177, 225, 230, 3,   208, 175, 157, 130, 8,   218,
      247, 170, 228, 14,  250, 251, 140, 220, 14,  212, 188, 171, 195, 1,   212,
      181, 207, 205, 2,   163, 184, 196, 185, 5,   142, 159, 199, 176, 1,   130,
      132, 140, 203, 9,   199, 243, 181, 168, 15,  247, 242, 204, 164, 11,  174,
      146, 198, 218, 3,   230, 163, 238, 136, 12,  130, 178, 158, 249, 10,  149,
      240, 204, 191, 9,   228, 204, 214, 170, 4,   242, 168, 132, 63,  207, 143,
      253, 240, 10,  210, 166, 246, 186, 2,   168, 216, 222, 162, 5,   241, 226,
      208, 203, 10,  216, 150, 185, 141, 12,  173, 130, 130, 204, 5,   167, 140,
      140, 158, 7,   224, 204, 187, 243, 4,   212, 247, 211, 212, 5,   171, 193,
      169, 172, 8,   148, 129, 238, 88,  239, 170, 248, 251, 3,   230, 252, 155,
      197, 3,   148, 170, 220, 211, 8,   172, 146, 230, 175, 6,   235, 243, 165,
      186, 4,   230, 158, 157, 187, 3,   207, 206, 145, 175, 14,  136, 225, 235,
      190, 15,  135, 175, 253, 169, 1,   155, 237, 177, 179, 5,   180, 161, 155,
      160, 15,  138, 133, 179, 167, 12,  221, 170, 176, 202, 6,   171, 131, 178,
      247, 8,   146, 239, 153, 251, 11,  128, 183, 154, 182, 3,   154, 240, 245,
      209, 6,   207, 137, 159, 171, 9,   192, 180, 191, 246, 11,  253, 143, 225,
      81,  222, 137, 185, 155, 8,   174, 188, 154, 243, 4,   170, 238, 166, 178,
      10,  226, 182, 176, 168, 7,   148, 175, 247, 131, 14,  173, 177, 239, 236,
      12,  177, 244, 159, 183, 7,   241, 150, 173, 185, 13,  232, 224, 169, 137,
      5,   207, 168, 131, 230, 1,   203, 162, 193, 202, 3,   131, 173, 240, 55,
      183, 215, 128, 137, 3,   133, 218, 167, 144, 14,  129, 136, 189, 243, 6,
      239, 157, 134, 248, 9,   172, 137, 234, 168, 2,   193, 240, 176, 235, 11,
      242, 148, 152, 217, 6,   253, 184, 164, 173, 11,  228, 215, 198, 128, 8,
      129, 252, 183, 6,   137, 250, 183, 210, 7,   208, 210, 163, 181, 6,   167,
      244, 197, 183, 15,  157, 215, 173, 242, 8,   211, 182, 254, 181, 12,  235,
      158, 194, 212, 9,   218, 154, 242, 147, 11,  220, 199, 237, 141, 12,  155,
      177, 201, 103, 254, 161, 191, 215, 8,   230, 235, 168, 49,  208, 227, 236,
      235, 12,  201, 130, 172, 253, 5,   180, 140, 169, 224, 15,  234, 243, 153,
      151, 12,  193, 190, 224, 143, 9,   129, 245, 133, 204, 8,   182, 209, 250,
      178, 8,   148, 139, 144, 193, 11,  230, 182, 245, 164, 7,   149, 204, 161,
      226, 14,  175, 229, 148, 166, 13,  148, 140, 189, 216, 3};
  SeekableInputStream* const stream =
      new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer));
  const int32_t junk[] = {
      -1192035722, 1672896916,  1491444859,  -1244121273, -791680696,
      1681943525,  -571055948,  -1744759283, -998345856,  240559198,
      1110691737,  -1078127818, 1478213963,  -1999074977, -1236487259,
      1081623627,  1461835677,  1591726278,  -1952575303, -1153279155,
      -490105022,  1763048303,  -438594735,  -1943318570, 665131315,
      -992928519,  -293947656,  -27330946,   -1617757142, 1557060559,
      -1979359235, -2141705600, -568297608,  1062268262,  546298983,
      2078961052,  1350125334,  -540110141,  1306099749,  -1200938434,
      -463354631,  329439552,   -1302441847, -432946209,  1420346281,
      -1051221106, -938249481,  -1539784278, -633078252,  -978731267,
      -1561373991, 1629413219,  1092825247,  -261977862,  838447829,
      1919107204,  1005793149,  1642588377,  -1464918718, -1917550168,
      1003195972,  959160789,   -1522112553, 181240876,   -849957699,
      -458276524,  -702660955,  1860227091,  1705852155,  -1998443154,
      -360453561,  1463660586,  -887384402,  -1905027152, -1872509609,
      -437752724,  -1567069256, 1418352668,  -460909277,  -91142489,
      -1223052800, 1097921652,  -989185632,  1256987999,  -177351034,
      -1872472137, -789485410,  -2128291599, -754152008,  -1726480917,
      -344889284,  -196409605,  2041828611,  1030395933,  -387646305,
      122767355,   31127980,    1207069862,  -1514210082, 1440969525,
      -1135691553, -222758993,  1750352704,  1293980890,  -723071736,
      1827770358,  -1000870743, -1082906010, -696877983,  -252767279,
      -1516790960, 815546697,   2030795,     -44506509,   103592117,
      -1482662967, 927187170,   1038067053,  -1372409134, -1839775706,
      1288569419,  347516536,   794972304,   -547875330,  2037259599,
      -14750351,   -789333636,  -1172998669, 1751028141,  -123944284,
      -148751174,  -5812342,    -65684309,   -901631668,  -1730780359,
      1806879062,  -1718574994, -502581670,  -593823449,  -500334763,
      917654667,   -371046539,  -11224409,   -22297703,   2077801437,
      717176386,   712742849,   -88095446,   -377406568,  -1498205212,
      135250842,   -186007254,  1575202718,  1356337350,  1333002980,
      -151543238,  1561151504,  2084754583,  -1963332201, -1078676964,
      -981959640,  1602476694,  964958176,   514867609,   -592880058,
      -1053778417, -1385343398, -1679005019, -399336120,  -1348025564,
      -1859939973, -1900785472, 2029569822,  -1292867632, 1842863184,
      -1326742626, -1647402852, -1615986391, -2004041108, -1927387127,
      -388061550,  90851556,    -1327038179, -407516410,  1845693465,
      -704577762,  1924407265,  -449969353,  275696175,   252281945,
      1918737432,  1112818815,  -518024058,  -574451772,  2092342266,
      1855130091,  1320798104,  1779205566,  385703114,   -712984113,
      669819902,   1909731996,  -1278685109, -1569593296, 881748738,
      1814556074,  1613634931,  -385688735,  -2071646094, -1773311888,
      -118425506,  1721906928,  -1349880393, 634302005,   760022405,
      761327810,   -1692081627, -1260841016, -1558856657, 99218556,
      102018195,   -1297008771, 164461607,   1741035812,  -148600274,
      1286275446,  1462487726,  -1573434104, 974796426,   -2059029469,
      -2104104269, 1866472414,  -1650530055, 1795114251,  227296321,
      1276834604,  -1985393888, -9742901,    1614958392,  -659109655,
      2088223942,  223737183,   1388180799,  1359284324,  -842845969,
      444248480,   792108792,   960424293,   -507555799,  -1025721075,
      -1858379658, 1074173329,  1761578021,  425012429,   -240453397,
      2024456210,  -324280184,  1589154548,  -1728079451, -1692822665,
      1356528899,  1061517573,  1931192379,  1215961560,  379843745,
      1361149623,  -1461456893, 691110717,   2110459487,  1321410812,
      2009528006,  1972104767,  -2012050687, 1233284414,  -182949706,
      1670813423,  -1217301469, 594224363,   -299708512,  1966313463,
      -369112947,  403641651,   88148317,    -2024969729, 1133025739,
      314550032,   1534341518,  1083403602,  -894963971,  1635904390,
      1275196039,  1770867136,  2003009771,  -545216468,  -135106165,
      1264541893,  2022351708,  -1678497814, 151276090,   1283919338,
      -1927614553, -206580733,  1377848647,  627609963,   1823245450,
      -134096555,  -574753171,  -1744928487, 1723985722,  1167154655,
      -599470685,  546628481,   -100331078,  1303120516,  2089166733,
      -2022155954, 456890992,   -1002705650, 2049833270,  656668907,
      -44900108,   -525666700,  -2134854916, -1778466708, 1099709483,
      1753848159,  10966731,    -932986450,  -1244650092, -735949590,
      -836092531,  -1380029252, -255869471,  259782569,   -1689370655,
      1681300596,  -998144311,  1911129837,  -863029750,  -402765462,
      1405052444,  325400133,   950928169,   1208813323,  -1927723497,
      -36025530,   1953996718,  -130830587,  -2119112967, 828918159,
      1875760908,  -2110464282, -660032043,  -1445534969, 1754377388,
      859122691,   79215786,    -1457379224, -845505501,  715141530,
      -1483079760, 1668988417,  1189423270,  -2117214918, 439999476,
      -1399973705, 467038141,   -494559901,  -1783874778, -1599666356,
      -199642314,  1949521512,  1089253553,  645336035,   -25686436,
      1450983836,  267113484,   73222595,    -497431960,  438311597,
      442985552,   -1777857701, 933496376,   -1594540214, -505331447,
      -1315298171, 1016898878,  966042892,   -17718192,   1045280014,
      -39208518,   -2060138094, 1282411033,  1713508214,  1851842091,
      -58654482,   -474136376,  817547251,   296628738,   -1658010049,
      -299884790,  57814971,    -1222513255, 869855902,   1558100706,
      -905854845,  -1326530206, -1092944323, 1103855106,  4668482,
      1477604451,  -590041139,  -1784763556, 282428730,   231044577,
      269278752,   1575627255,  1500279352,  1910855259,  -1419761648,
      318679302,   107160345,   -1193714758, 2041235102,  -336170699,
      -54224496,   -676354875,  -84222627,   -175409338,  1620482599,
      1176801242,  1844243729,  77824988,    1438587267,  -215131942,
      -1383445358, 953582743,   1451014635,  -2068176283, 1058786294,
      -1159701920, -1767170805, 1441979975,  769713646,   540064005,
      525602292,   -747255503,  -1765923984, -1528763385, -1768241306,
      -1168806485, 33265046,    -1719626574, -2061575599, 2013225545,
      -145323579,  -1616398994, -1614251879, 101988124,   389536785,
      -531784107,  1942497305,  1624000107,  -1793946656, 1590267653,
      1454383595,  1477205155,  956593869,   341516726,   -1104289307,
      1711827851,  1007508942,  392549262,   -162616731,  1233239227,
      -254895976,  -932430285,  1789001809,  -258910386,  1829247809,
      -1165175134, 2050581337,  1388743894,  1680716327,  -955562689,
      -1196112257, -378740336,  1404672016,  -1064391892, -209744680,
      -1303657512, -1534080366, 1819175133,  -1168503149, -144324898,
      -1139294027, 2079078892,  830990906,   1281643674,  1239967702,
      -36455895,   -893671880,  1538788093,  -1237546291, 1206167541,
      475817626,   -1186645912, 539232082,   1475246031,  1699396377,
      838282081,   717780380,   -1411838673, -1709848232, 504121732,
      627189322,   658484370,   -538814615,  1922572726,  1004837510,
      -1174373674, -1655080299, 2094525857,  355981927,   -1636557369,
      1393356380,  -624347557,  -247050857,  -2061086215, 119232442,
      -549875608,  1132263989,  1210157527,  -1950418773, -947805470,
      1473662460,  -2039682564, 1511364593,  495775222,   -1754933852,
      578631361,   974692628,   619906194,   -270694776,  827229974,
      -626474838,  217984348,   233537160,   -1394225003, -1325367080,
      -825843995,  -19309008,   -1051287340, -1709856232, -1924609250,
      1220845849,  -262498310,  1923705916,  550530570,   475633807,
      -2108852076, 407081906,   1182356405,  1433463924,  -717627223,
      1985302280,  52562276,    462014051,   1892679691,  -1685829454,
      -432280051,  102304536,   1239474159,  -1947789045, 1873237513,
      1162364430,  378408895,   436753561,   1401009671,  -331011223,
      -687420625,  -2112505195, 1253509443,  -1326656490, -223810162,
      -1795864663, -1635326216, 1135351856,  1072514654,  -1135464197,
      1799420691,  1814080421,  -1813241050, 290458473,   1787024936,
      -509812455,  -1245699451, -1246584042, -628864855,  208287497,
      -941972342,  -282245339,  764591445,   -1950018765, -155292605,
      -2039181884, -1502132499, 927879221,   -422951277,  1004131436,
      -359377619,  -279608972,  1795607112,  -504889242,  491472122,
      -1473703617, 1384613229,  -1074969712, -132300841,  -809001677,
      -232707109,  718661985,   -340386147,  1025520864,  -1304716522,
      -159879127,  -21609621,   -356163924,  -1650473131, 749957789,
      1659608794,  -1630468361, 1401873890,  -826137197,  -1745267595,
      2096479616,  108095652,   -1070305783, 510702184,   681305350,
      1581358841,  373543787,   -548048778,  1236252978,  1136594889,
      571396628,   1563585072,  -777040205,  884269272,   -1395109355,
      -729593757,  -2049576534, -881926310,  184632886,   -1534407215,
      -113998263,  1897790924,  827242297,   -1493910748, 207409078,
      -1381606655, -1469137051, -1357021665, 574603572,   1818109562,
      -1462551998, -523689962,  -784515708,  -1377438213, 1830890656,
      1018570656,  -563746679,  548954202,   -1075828514, -284139126,
      -1646923990, -1248333415, 1376072552,  328385806,   1612310907,
      -2015376329, -1482101887, -1268324540, -1073923297, -47412286,
      -2031027134, 1724101079,  1882428903,  1226325168,  1060182497,
      -1439411972, 2068153022,  303922543,   -1010299082, -527725408,
      -868084535,  -1453122373, 729915259,   -1810431776, -1170855222,
      -1854748370, 1653489747,  -1024923202, 1166795461,  888317469,
      -1095897075, -263817712,  -1283775515, 128113057,   725330985,
      -340535877,  1390305951,  -2040698894, 295390234,   519468833,
      -179502313,  -404230148,  1113834573,  217655255,   697236931,
      -447996629,  -2135157399, -1308291941, -1886148018, -161160567,
      -67015720,   360555652,   -598747970,  865850123,   -802081914,
      1971145595,  -477789992,  -776787161,  1811555304,  -1735200791,
      1891237826,  -986816598,  -1744598976, -2001145934, -171623446,
      -2118892089, 1848264734,  -5746591,    1454333734,  1273178226,
      1030190121,  1328203427,  -29346019,   314597102,   -2012456161,
      1933656313,  787872740,   -160286555,  -1438880998, 387705257,
      1464818923,  1301041719,  1984783124,  -1271147531, 1487861786,
      1042524116,  674928812,   333826191,   -606298314,  -1923024690,
      1893750313,  -1852775093, 1334513545,  -1533194135, 1098945727,
      -1334639594, 982450114,   -1887582219, 811767569,   1106779430,
      2128521241,  -801057249,  1282615287,  1309743218,  -1036048202,
      -675233917,  -2015133312, -1407597980, -805866925,  181664900,
      1428234298,  987551693,   -1305045729, -269637537,  -161413456,
      -1825022695, -464152091,  594365822,   1788687667,  173257923,
      654002541,   1479451402,  -343189027,  -1317263094, -1632991710,
      434048963,   -218104622,  -2116821787, 1386879989,  2024277523,
      -1683903287, 71981107,    1472146048,  -954561185,  -1929121846,
      -99278026,   -836661907,  1161399456,  645528633,   -229497534,
      -559683816,  -347755982,  846036498,   1843706545,  1988047218,
      -1916349205, -2046432139, 2117711385,  768342313,   -1484993937,
      -1028574363, 1840103616,  2024908549,  648097475,   820426188,
      1813302864,  -1862894699, 1853557023,  -645272638,  -694642746,
      -484368118,  770488839,   -1646124786, 453988784,   -771295390,
      -459096420,  -646899732,  2068517271,  1404075720,  -1273309905,
      -582314992,  -671770951,  -449870790,  -48212202,   1579880938,
      -476878341,  513340524,   -153887805,  1303129644,  -1736144611,
      1997437163,  -551454447,  -539393656,  -410513105,  -1730002043,
      787100897,   156300478,   1655413827,  -1314804760, -1017480219,
      725995733,   837174883,   125404041,   -1422872133, 174985128,
      506105285,   -2026814521, 122957373,   2018881699,  -1531346372,
      304642639,   -1823589353, 738989518,   842332146,   -728492095,
      691793049,   1406905611,  848671060,   2146403475,  921228493,
      503081371,   470135884,   -1234198474, 1009780684,  1177932262,
      -34718027,   1887702646,  1052893773,  443393403,   512495115,
      2136307494,  -1438483586, 476864340,   2001989218,  1022729211,
      1855835926,  -1410262945, 1184679065,  -689936200,  -961809237,
      -37581255,   -1029470257, -1480892021, -401541056,  453202492,
      1112595988,  -1405938761, -941021151,  65758395,    -496021405,
      179072114,   126610419,   711573643,   -176404016,  -797304305,
      1052539142,  -531326266,  137188861,   -1079747744, 104921070,
      -1577624885, 1214665426,  1079238997,  72216401,    892964488,
      -285963924,  383166184,   -2067986431, -947233029,  1764614742,
      1564468029,  -421298612,  -1385150219, 1439869174,  -871204348,
      55432339,    1314201120,  -1685876151, -1703440863, 300653337,
      -1977445820, -2046493998, 309926543,   378495260,   1958992069,
      -1113354289, 1792193921,  1263805225,  1373967983,  1352521646,
      -60235319,   -675624276,  26323830,    -591835714,  -1885760899,
      -1519938874, -1998677577, 375457065,   1000260823,  -1450154397,
      -1864463548, -1911093470, 1114002525,  833260426,   -571392737,
      1004593242,  -204444351,  -336121865,  710431300,   1173033399,
      376979722,   -1770804506, 85447404,    -484026297,  -1606360717,
      -1582593999, 1774771216,  -1889730446, -669358702,  641183901,
      -1956035797, -479348625,  -619594436,  1553417071,  -1684327868,
      -583232007,  587191975,   1019475270,  1299447851,  -1094565055,
      726858321,   -22214620,   254396674,   -1515419866, -491290335,
      870396109,   -589067521,  -998073181,  -585938741,  -27198124,
      -1998075025, -1636627064, 1922665080,  907579634,   245499901,
      -1491598228, 1290991525,  -417806055,  783775795,   987384289,
      -1664073398, -1818943544, 518513473,   -1972739863, -17076929,
      -1087578336, -2130735619, -11897175,   1247714779,  39549495,
      1424721195,  -136636068,  1321021406,  -699064532,  -212744195,
      -637015415,  1346785936,  1615976060,  -735897892,  869318776,
      -2064220631, 1083884434,  2142530152,  1941891810,  1747938419,
      584211108,   1430935230,  673025767,   -1522239571, -349593668,
      534830840,   1439125060,  221479859,   -1665023212, -711033607,
      1976217028,  1419826523,  -912609625,  1879662953,  -683020553,
      -1481737184, -1453041404, -419287042,  1209159969,  -810667515,
      328331620,   -554189827,  -38670987,   758568371,   392902911,
      805013760,   831693442,   102032100,   -339108454,  -1214835719,
      -535575827,  471829764,   1693706596,  -692180874,  -1274840224,
      -1770889195, 316972034,   3851814,     -1468783678, -2077914158,
      -93044504,   112417435,   301526952,   -1801634537, 2040682218,
      -1540074671, 18395658,    -1607816833, 399285522,   2083671022,
      -1317230535, -1170230962, -1622288205, -1668653877, -1756594160,
      1595947921,  335177918,   106581426,   -1517810326, -536170364,
      -1434305965, -723341079,  1614963411,  478361139,   1696920219,
      994126447,   -341229183,  1677955939,  329146836,   1508992901,
      2013205637,  -1291068239, 603886509,   786926191,   -1973621955,
      1873694716,  -1987964717, -151056773,  -982178036,  108200448,
      1655973323,  -643471294,  65458253,    -417971646,  1919828738,
      -933763539,  171755140,   460249395,   -1125856734, -16739013,
      -2135736362, 670532752,   203611302,   1890987520,  -1483650118,
      -683059705,  -77856848,   -769700368,  -1416934159, -1500850145,
      -1215059687, -1879473955, 763272883,   -1968038568, -2088236599,
      1229512381,  2032523562,  -474604143,  1842260297,  -776126031,
      -1134008029, 2108556714,  -1880709482, 237393986,   -69243134,
      782458217,   -1259490761, 1788876781,  1549080823,  -859428959,
      -605940335,  1018516449,  -207426450,  570450064,   -1389536390,
      592346118,   -1331252532, 165183113,   -2099745269, -1356937151,
      21822807,    -748103470,  -142393926,  547509238,   -634686347,
      1026300111,  1330070951,  1759768014,  1142187544,  968694111,
      1213038901,  1885970361,  -323991688,  363518085,   -1672108324,
      -804048074,  -1363075581, 1701273418,  1911929917,  44447185,
      410977169,   1365427170,  959862646,   -948485651,  -1849935396,
      -1009669619, -1801379401, 525897667,   -1955430097, -1448024640,
      1931243285,  1760694954,  -1371363748, -846322684,  -381157475,
      -1725454696, 411728882,   -659046884,  -2017706580, 326504936,
      -1505447249, 754195181,   1338936701,  -176693411,  -399948493,
      -1610399078, 1200783875,  -1135651738, -1011062025, -1590458258,
      1626934009,  -2101147741, -832223620,  310144767,   -1670647754,
      -139535449,  -511393081,  -1608439153, 1179987525,  -566009345,
      1746424843,  -972134987,  -35190731,   -123082125,  -1225027672,
      -12768196,   57860780,    -1169964405, -896086188,  -73457590,
      -1695925182, -585143980,  -419933289,  -1162453564, 755390220,
      -827933852,  1698208124,  1044230129,  608724853,   -164275430,
      -102639739,  1198259549,  1137531989,  -1116284630, -1356999201,
      1957170687,  -1307732933, 1650483544,  -638806570,  -1154478179,
      173151245,   1569845123,  1591311498,  -494240657,  841880275,
      975655140,   2144072931,  2093762562,  904195791,   1304524183,
      887864513,   555382367,   747757520,   -988490149,  1029722488,
      462127468,   -865600825,  -355339627,  -717869189,  -1460719471,
      1840667290,  -1467405670, 2066471254,  1682556574,  1506116152,
      -1015317971, -959194655,  557427179,   1449151468,  -966928570,
      -862440014,  -934483264,  -382993930,  1831680277,  1962868691,
      1253985271,  605568087,   -1920103611, -162069068,  -1335381537,
      1466515436,  755896709,   -152123806,  120724324,   -2090132802,
      -749600957,  -513332999,  1697220972,  620702104,   1086605242,
      2010555991,  -1344440189, 573125337,   -412489169,  2089343506,
      -887304007,  1741382282,  -1294582154, 1399959211,  -1465487414,
      -987925582,  2054751675,  1026201859,  1347793280,  -581133591,
      -1900657794, 1589876493,  -555443627,  -1711864278, 431235807,
      1209591236,  248744027,   1750009325,  -120886245,  1610195551,
      -1381986720, 459223925,   2001423958,  1232784067,  1433853260,
      1951017062,  654934426,   1804947769,  1931534286,  -495608934,
      1933837599,  -1427818655, 2140007479,  -713427148,  1995046348,
      -1203051419, -35213147,   774683636,   -592086787,  630139504,
      1094303075,  -1180875316, -438823034,  2117971809,  -646196848,
      -1103051341, 798549240,   -1510953796, 1429065214,  704873658,
      23191330,    -1585169696, 1840542299,  -591215524,  664793562,
      357997439,   -963884906,  1863569433,  -54498563,   991835977,
      -716807557,  376575045,   -591189325,  -449494294,  -404697696,
      1597459996,  -108456969,  -1899610313, 1255661956,  794700058,
      1115324758,  658753699,   1719389172,  1145101705,  -1181105674,
      -1622578697, 233308080,   1451926619,  1322377945,  -1800772031,
      -810522289,  -1951656903, -527284125,  1582214669,  -1422750113,
      2022685659,  -1026827239, 634221522,   1270282959,  -414347878,
      -1553149269, 1740116911,  -1502502767, -697241533,  -1983623628,
      -1015070121, 1211501947,  -582055635,  1158111423,  1409791816,
      -1650549906, -1289481332, -372952307,  698533442,   1253310137,
      126736648,   112219028,   -260924425,  538236607,   -8216695,
      1258254795,  1250497022,  695411926,   1807753300,  1141377444,
      378228237,   -1640510094, 1772051547,  819577690,   1637064807,
      2004518786,  1726570960,  1237945196,  1890473363,  142532121,
      431642362,   457680616,   1793421134,  114108497,   -1609966004,
      390875116,   865761473,   -284648597,  -1270011981, 1801086569,
      -450041354,  34724667,    1461207855,  -1563369174, -1193357688,
      890744002,   -303462235,  306064148,   -1714379878, 1160621852,
      782444786,   1760233647,  -251092726,  -1239728484, 451165251,
      -971693596,  -1492590107, 1251141173,  1068753315,  127560712,
      -675602404,  -1943731429, -1442429995, -1268600807, 783284088,
      960921257,   -523462813,  1709486406,  1864033227,  32424581,
      1723753974,  771274676,   -606900633,  1574849281,  169589480,
      1895990143,  1261911764,  -1663992892, -1265826537, -1801917442,
      -397409604,  -1627809111, -1438727684, -932073653,  1633378602,
      357569766,   -1297857029, -423873023,  1795321075,  1274442352,
      -1876019716, -897691833,  -1569633677, -2028495970, 1542882873,
      -1573770995, 2119629948,  -85633780,   -936570279,  1393887381,
      -488600436,  -1684597311, 1160585918,  1519028021,  1044513341,
      150838164,   1792373530,  653285210,   -1248666111, -191831605,
      -1891529144, 1283118544,  -1276441843, -1223401980, -425946279,
      1970465599,  721976469,   -1505253544, 45266924,    1806828024,
      -2070615494, -908596292,  -1117250622, 331420657,   -660185152,
      589879211,   210813328,   -456387314,  -1601399804, 198300673,
      -1995521769, 334183842,   665336620,   -1793671638, -2082929039,
      -782763724,  1042860064,  225541755,   -622972242,  591101317,
      -1369419464, 1119101151,  -1294175841, -400470575,  606374965,
      94458805,    864049393,   -1426575787, 1101993333,  1230205177,
      497689724,   1211124753,  -1512147358, -1012370015, -505814051,
      120429775,   2145165099,  -1502901431, -474452671,  422689635,
      -1152989257, 962267153,   280766852,   1196475443,  -784471083,
      1169426630,  1749421434,  -1606879751, 1300649655,  1121651007,
      -1400613749, -724755769,  1045426592,  -1958011127, 573427844,
      -1811022517, 682117596,   -143934906,  318890668,   198143572,
      103973361,   -1685647151, 287732246,   -260465004,  30450195,
      -48654426,   -1321307339, 1256181927,  -1817379876, 1951739521,
      1537791157,  1145153363,  -1463184068, 255386052,   -872356472,
      1042060305,  1244057261,  -968333667,  100042814,   2043095500,
      -890128213,  637318503,   -1322924135, 858281960,   -1489122205,
      1572431441,  -2013618080, 1719193989,  -1529545814, 1940436029,
      2032604275,  320677124,   1625574448,  -694531606,  1157552927,
      25905097,    -1627753995, -1172357804, 1366114995,  941005378,
      2066816251,  1205853530,  -1922099373, -22435800,   431025724,
      1372468641,  21209867,    -1272633083, -867481634,  -1918735176,
      -534439129,  -1383070475, -1696306012, -1724096388, -58061119,
      -943955536,  136028839,   -614980418,  -1778996582, 1807875015,
      675695942,   1790527522,  -528619987,  904810541,   950940251,
      1238041417,  -8393215,    -1446028808, -682467665,  -1544440270,
      -1472962754, -586815383,  2070764975,  648828893,   1113860227,
      -2116497111, -2080720801, -1049969615, 1067459574,  2052227797,
      -157225074,  -437791713,  -260129125,  558283708,   772040010,
      237325318,   1564229865,  -935958297,  1037756822,  -1223152552,
      1757318298,  -740036263,  -1268851110, -303275906,  -1279892542,
      902459799,   -952359270,  -339785735,  -1901753053, 1389276010,
      -2063575830, 1460647369,  -1640863297, 1336454626,  -1497707231,
      -1927020015, 1252446125,  368146846,   1594936652,  -1500704261,
      1661025840,  -1850727093, 2144637413,  -1158186535, -1831026939,
      -889829783,  1953368389,  -1746264692, 166004987,   -1043094955,
      -2125018538, -1373375703, 1892792265,  -1058706557, 248660620,
      1346423769,  -1942180581, 608538378,   1244024597,  -2056829184,
      -1772818706, 199415397,   1546106190,  440423328,   -693070051,
      -778903177,  -919523719,  1402659839,  -1735022534, 1622883535,
      752024237,   -1490765944, -1388651615, 931076141,   -2047594739,
      1103847150,  -704725814,  741564741,   1040069436,  1726406295,
      61122015,    1437812418,  1111368208,  -108948681,  1619816846,
      910911373,   556728709,   -802734918,  -976030177,  -1752026546,
      -1860499981, -169913498,  60202440,    904411442,   -240036733,
      1049955136,  1551675456,  1153662447,  -770639649,  -864966225,
      -1589042799, 362084868,   -811531736,  1691619679,  1948514866,
      1648879429,  -82248915,   -119887768,  -1320899500, 1313770646,
      -2019806760, 757267630,   -1385371012, -2044161290, -1090682389,
      951372426,   -1625173167, -1450498369, -446130452,  1245989289,
      -416577865,  -1877776085, -385296034,  257025076,   617642011,
      -269486566,  -283804879,  -1469334479, -1010626032, 1903591953,
      976050042,   -1690852568, -2113044709, -2040081275, -1385916058,
      1681025033,  -458183734,  804037210,   -1357816212, -2122604724,
      -1620519414, -1081733978, 897828801,   -338474662,  408632762,
      353159097,   -643223791,  1432419115,  -1063925125, -1283707295,
      1600221803,  1966239023,  1602403017,  -1896954519, -465007748,
      -1931897742, 1728032847,  -990776477,  -215620097,  24160762,
      1088990582,  -1661538137, -413783692,  -993213325,  1792858174,
      -1785449573, 530278927,   -1123162098, 1527518801,  -994386637,
      1980429555,  -767184731,  507106901,   288876987,   -1165022305,
      -1445201374, -2062378367, 1930504660,  -1444470104, -538236127,
      -2101929870, 1657423803,  594868136,   641992148,   423166527,
      1570659537,  2143752822,  -1587338457, 938659018,   444521303,
      -1613249129, 329284644,   879036249,   -244264840,  214041075,
      2021893527,  -841410460,  -1997684084, -1335815733, 330146293,
      -810388560,  461221786,   -331575574,  1114860921,  -1823171172,
      1460924447,  746653722,   -1823299441, -1709862982, -1072627187,
      1272515033,  1696334966,  -820424031,  -1352171498, -369000884,
      524637728,   1634525440,  109234473,   623876212,   -1617988772,
      -1920751626, -529392580,  1426964127,  -850772426,  -1415825247,
      918760524,   -2005391328, 306414237,   -741998859,  1034121377,
      -1535565247, 1528007238,  -645197362,  1183823190,  1452290168,
      -297497904,  366899271,   659402776,   1162771417,  33575465,
      -819969972,  1550032173,  1812350412,  1019335983,  1108271725,
      -1895946056, -1343073793, -448887654,  -1533743371, 2121607227,
      169180061,   982879256,   -1848545221, 27519068,    409070016,
      1846632377,  1454960183,  1548882667,  1035638563,  -710263923,
      -1786568873, 1026978083,  1381572891,  -532776566,  -989703533,
      -1578299857, 541921735,   -195042893,  -1656822082, -1680966160,
      -781641338,  -287090569,  -1920834785, -1959900163, 273017769,
      1364365142,  -1230830272, 711120619,   -464932247,  540384202,
      -2145789947, 2136546253,  1813925403,  -534472604,  -193288193,
      362493438,   703583137,   1559213108,  1938188546,  1406703389,
      -328204765,  -500280210,  -1702502156, 862665560,   -969766913,
      510405705,   1076079592,  1984257517,  1975623421,  204828458,
      349826410,   -731418130,  185132999,   1286701313,  -2055650532,
      -1514773692, 497599639,   1619904755,  1469303937,  -1274649611,
      581620530,   66095673,    -1460642792, 330221993,   707515924,
      -1421482169, 1624712620,  -750796951,  -971080468,  657945392,
      759856618,   -1120219222, 93175882,    -532613816,  475234099,
      1161529994,  855426198,   -597998838,  464758707,   -1928475560,
      2079160388,  -178236356,  -724974414,  2047043674,  1651925317,
      -883296943,  -1198932182, 1605581769,  459492800,   891206669,
      -1253302888, 1600646432,  -85730303,   1102520943,  657674007,
      1394924437,  981863857,   1883171786,  -1724771415, -997457177,
      -1804969401, 680867892,   -241199656,  -480782502,  -58592066,
      -412095964,  -1896150659, -926392833,  -1333839736, 311247446,
      -1588993057, 898827577,   -1523879487, 1074320882,  -6749953,
      -1025965701, 861172904,   -2071510292, -1193653711, -1667222954,
      -1296582582, 1497253549,  1625141742,  -108604494,  1165486207,
      51714803,    1723701480,  -802521253,  2114265882,  1634942197,
      -1224478625, -1153482049, 1127175259,  1544684234,  978234803,
      -1982083851, -1784846680, 495428362};
  const uint32_t fileLoc[] = {
      0,     0,     0,     0,     0,     3,     3,     3,     3,     6,
      6,     6,     6,     9,     9,     9,     9,     12,    12,    12,
      12,    15,    15,    15,    15,    18,    18,    18,    18,    21,
      21,    21,    21,    24,    24,    24,    24,    27,    27,    27,
      27,    30,    30,    30,    30,    33,    33,    33,    33,    36,
      36,    36,    36,    39,    39,    39,    39,    42,    42,    42,
      42,    45,    45,    45,    45,    48,    48,    48,    48,    51,
      51,    51,    51,    54,    54,    54,    54,    57,    57,    57,
      57,    60,    60,    60,    60,    63,    63,    63,    63,    66,
      66,    66,    66,    69,    69,    69,    69,    72,    72,    72,
      72,    75,    75,    75,    75,    78,    78,    78,    78,    81,
      81,    81,    81,    84,    84,    84,    84,    87,    87,    87,
      87,    90,    90,    90,    90,    93,    93,    93,    93,    96,
      96,    96,    96,    99,    99,    99,    99,    102,   102,   102,
      102,   105,   105,   105,   105,   108,   108,   108,   108,   111,
      111,   111,   111,   114,   114,   114,   114,   117,   117,   117,
      117,   120,   120,   120,   120,   123,   123,   123,   123,   126,
      126,   126,   126,   129,   129,   129,   129,   132,   132,   132,
      132,   135,   135,   135,   135,   138,   138,   138,   138,   141,
      141,   141,   141,   144,   144,   144,   144,   147,   147,   147,
      147,   150,   150,   150,   150,   153,   153,   153,   153,   156,
      156,   156,   156,   159,   159,   159,   159,   162,   162,   162,
      162,   165,   165,   165,   165,   168,   168,   168,   168,   171,
      171,   171,   171,   174,   174,   174,   174,   177,   177,   177,
      177,   180,   180,   180,   180,   183,   183,   183,   183,   186,
      186,   186,   186,   189,   189,   189,   189,   192,   192,   192,
      192,   196,   196,   196,   196,   200,   200,   200,   200,   204,
      204,   204,   204,   208,   208,   208,   208,   212,   212,   212,
      212,   216,   216,   216,   216,   220,   220,   220,   220,   224,
      224,   224,   224,   228,   228,   228,   228,   232,   232,   232,
      232,   236,   236,   236,   236,   240,   240,   240,   240,   244,
      244,   244,   244,   248,   248,   248,   248,   252,   252,   252,
      252,   256,   256,   256,   256,   260,   260,   260,   260,   264,
      264,   264,   264,   268,   268,   268,   268,   272,   272,   272,
      272,   276,   276,   276,   276,   280,   280,   280,   280,   284,
      284,   284,   284,   288,   288,   288,   288,   292,   292,   292,
      292,   296,   296,   296,   296,   300,   300,   300,   300,   304,
      304,   304,   304,   308,   308,   308,   308,   312,   312,   312,
      312,   316,   316,   316,   316,   320,   320,   320,   320,   324,
      324,   324,   324,   328,   328,   328,   328,   332,   332,   332,
      332,   336,   336,   336,   336,   340,   340,   340,   340,   344,
      344,   344,   344,   348,   348,   348,   348,   352,   352,   352,
      352,   356,   356,   356,   356,   360,   360,   360,   360,   364,
      364,   364,   364,   368,   368,   368,   368,   372,   372,   372,
      372,   376,   376,   376,   376,   380,   380,   380,   380,   384,
      384,   384,   384,   388,   388,   388,   388,   392,   392,   392,
      392,   396,   396,   396,   396,   400,   400,   400,   400,   404,
      404,   404,   404,   408,   408,   408,   408,   412,   412,   412,
      412,   416,   416,   416,   416,   420,   420,   420,   420,   424,
      424,   424,   424,   428,   428,   428,   428,   432,   432,   432,
      432,   436,   436,   436,   436,   440,   440,   440,   440,   444,
      444,   444,   444,   448,   448,   448,   448,   452,   452,   452,
      452,   456,   456,   456,   456,   460,   460,   460,   460,   464,
      464,   464,   464,   468,   468,   468,   468,   472,   472,   472,
      472,   476,   476,   476,   476,   480,   480,   480,   480,   484,
      484,   484,   484,   488,   488,   488,   488,   492,   492,   492,
      492,   496,   496,   496,   496,   500,   500,   500,   500,   504,
      504,   504,   504,   508,   508,   508,   508,   512,   512,   512,
      512,   516,   516,   516,   516,   520,   520,   520,   520,   524,
      524,   524,   524,   528,   528,   528,   528,   532,   532,   532,
      532,   536,   536,   536,   536,   540,   540,   540,   540,   544,
      544,   544,   544,   548,   548,   548,   548,   552,   552,   552,
      552,   556,   556,   556,   556,   560,   560,   560,   560,   564,
      564,   564,   564,   568,   568,   568,   568,   572,   572,   572,
      572,   576,   576,   576,   576,   580,   580,   580,   580,   584,
      584,   584,   584,   588,   588,   588,   588,   592,   592,   592,
      592,   596,   596,   596,   596,   600,   600,   600,   600,   604,
      604,   604,   604,   608,   608,   608,   608,   612,   612,   612,
      612,   616,   616,   616,   616,   620,   620,   620,   620,   624,
      624,   624,   624,   628,   628,   628,   628,   632,   632,   632,
      632,   636,   636,   636,   636,   640,   640,   640,   640,   644,
      644,   644,   644,   648,   648,   648,   648,   652,   652,   652,
      652,   656,   656,   656,   656,   660,   660,   660,   660,   664,
      664,   664,   664,   668,   668,   668,   668,   672,   672,   672,
      672,   676,   676,   676,   676,   680,   680,   680,   680,   684,
      684,   684,   684,   688,   688,   688,   688,   692,   692,   692,
      692,   696,   696,   696,   696,   700,   700,   700,   700,   704,
      704,   704,   704,   708,   708,   708,   708,   712,   712,   712,
      712,   716,   716,   716,   716,   720,   720,   720,   720,   724,
      724,   724,   724,   728,   728,   728,   728,   732,   732,   732,
      732,   736,   736,   736,   736,   740,   740,   740,   740,   744,
      744,   744,   744,   748,   748,   748,   748,   752,   752,   752,
      752,   756,   756,   756,   756,   760,   760,   760,   760,   764,
      764,   764,   764,   768,   768,   768,   768,   772,   772,   772,
      772,   776,   776,   776,   776,   780,   780,   780,   780,   784,
      784,   784,   784,   788,   788,   788,   788,   792,   792,   792,
      792,   796,   796,   796,   796,   800,   800,   800,   800,   804,
      804,   804,   804,   808,   808,   808,   808,   812,   812,   812,
      812,   816,   816,   816,   816,   820,   820,   820,   820,   824,
      824,   824,   824,   828,   828,   828,   828,   832,   832,   832,
      832,   836,   836,   836,   836,   840,   840,   840,   840,   844,
      844,   844,   844,   848,   848,   848,   848,   852,   852,   852,
      852,   856,   856,   856,   856,   860,   860,   860,   860,   864,
      864,   864,   864,   868,   868,   868,   868,   872,   872,   872,
      872,   876,   876,   876,   876,   880,   880,   880,   880,   884,
      884,   884,   884,   888,   888,   888,   888,   892,   892,   892,
      892,   896,   896,   896,   896,   900,   900,   900,   900,   904,
      904,   904,   904,   908,   908,   908,   908,   912,   912,   912,
      912,   916,   916,   916,   916,   920,   920,   920,   920,   924,
      924,   924,   924,   928,   928,   928,   928,   932,   932,   932,
      932,   936,   936,   936,   936,   940,   940,   940,   940,   944,
      944,   944,   944,   948,   948,   948,   948,   952,   952,   952,
      952,   956,   956,   956,   956,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   960,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   960,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   960,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   960,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   960,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   960,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   960,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   960,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   960,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   960,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   960,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   960,   960,   960,   960,   960,   960,
      960,   960,   960,   960,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   964,   964,   964,   964,   964,   964,
      964,   964,   964,   964,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   968,   968,   968,   968,   968,   968,
      968,   968,   968,   968,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   972,   972,   972,   972,   972,   972,
      972,   972,   972,   972,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   976,   976,   976,   976,   976,   976,
      976,   976,   976,   976,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   980,   980,   980,   980,   980,   980,
      980,   980,   980,   980,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   984,   984,   984,   984,   984,   984,
      984,   984,   984,   984,   988,   988,   988,   988,   988,   988,
      988,   988,   988,   988,   988,   988,   988,   988,   988,   988,
      988,   988,   988,   988,   988,   988,   988,   988,   988,   988,
      988,   988,   988,   988,   988,   988,   988,   988,   988,   988,
      988,   988,   988,   988,   988,   988,   988,   988,   988,   988,
      988,   988,   988,   988,   988,   988,   988,   988,   988,   988,
      988,   988,   988,   988,   988,   988,   988,   988,   988,   988,
      988,   988,   988,   988,   988,   988,   988,   988,   988,   988,
      988,   988,   988,   988,   988,   988,   988,   988,   988,   988,
      988,   988,   988,   988,   988,   988,   988,   988,   988,   988,
      988,   988,   988,   988,   988,   988,   988,   988,   988,   988,
      988,   988,   988,   988,   988,   988,   988,   988,   988,   992,
      992,   992,   992,   992,   992,   992,   992,   992,   992,   992,
      992,   992,   992,   992,   992,   992,   992,   992,   992,   992,
      992,   992,   992,   992,   992,   992,   992,   992,   992,   992,
      992,   992,   992,   992,   992,   992,   992,   992,   992,   992,
      992,   992,   992,   992,   992,   992,   992,   992,   992,   992,
      992,   992,   992,   992,   992,   992,   992,   992,   992,   992,
      992,   992,   992,   992,   992,   992,   992,   992,   992,   992,
      992,   992,   992,   992,   992,   992,   992,   992,   992,   992,
      992,   992,   992,   992,   992,   992,   992,   992,   992,   992,
      992,   992,   992,   992,   992,   992,   992,   992,   992,   992,
      992,   992,   992,   992,   992,   992,   992,   992,   992,   992,
      992,   992,   992,   992,   992,   992,   992,   992,   992,   992,
      992,   992,   992,   992,   992,   992,   1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,  1625,
      1625,  1625,  1625,  1625,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,  2255,
      2255,  2255,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,  2886,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,
      3515,  3515,  3515,  3515,  3515,  3515,  3515,  3515,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,  4149,
      4149,  4149,  4149,  4149,  4149,  4149,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,  4784,
      4784,  4784,  4784,  4784,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,  5419,
      5419,  5419,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,  6047,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,
      6676,  6676,  6676,  6676,  6676,  6676,  6676,  6676,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,  7308,
      7308,  7308,  7308,  7308,  7308,  7308,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,  7943,
      7943,  7943,  7943,  7943,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,  8575,
      8575,  8575,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,  9205,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
      9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
      10478, 10478, 10478, 10478, 10478, 10478};
  const uint32_t rleLoc[] = {
      0,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,
      3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,
      2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,
      1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,   4,   1,   2,   3,
      4,   1,   2,   3,   4,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,
      11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,
      26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,
      41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,
      56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,
      71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,
      86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100,
      101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
      116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 0,
      1,   2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  15,
      16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,
      31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,
      46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,
      61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,
      76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
      91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105,
      106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
      121, 122, 123, 124, 125, 126, 127, 128, 129, 0,   1,   2,   3,   4,   5,
      6,   7,   8,   9,   10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,
      21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,
      36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,
      51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,
      66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,
      81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
      96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
      111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
      126, 127, 128, 129, 0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,
      11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,
      26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,
      41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,
      56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,
      71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,
      86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100,
      101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
      116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 0,
      1,   2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  15,
      16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,
      31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,
      46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,
      61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,
      76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
      91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105,
      106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
      121, 122, 123, 124, 125, 126, 127, 128, 129, 0,   1,   2,   3,   4,   5,
      6,   7,   8,   9,   10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,
      21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,
      36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,
      51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,
      66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,
      81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
      96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
      111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
      126, 127, 128, 129, 0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,
      11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,
      26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,
      41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,
      56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,
      71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,
      86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100,
      101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
      116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 0,
      1,   2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  15,
      16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,
      31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,
      46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,
      61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,
      76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
      91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105,
      106, 107, 108, 109, 110, 111, 112, 113, 114, 1,   2,   3,   4,   5,   6,
      7,   8,   9,   10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,
      22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,
      37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,
      52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,
      67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,
      82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,
      97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
      112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
      127, 0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,
      14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,
      29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,
      44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,
      59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,
      74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,
      89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103,
      104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
      119, 120, 121, 122, 123, 124, 125, 126, 127, 0,   1,   2,   3,   4,   5,
      6,   7,   8,   9,   10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,
      21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,
      36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,
      51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,
      66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,
      81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
      96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
      111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
      126, 127, 0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,
      13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,
      28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,
      43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,
      58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,
      73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,
      88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102,
      103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
      118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0,   1,   2,   3,   4,
      5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  15,  16,  17,  18,  19,
      20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,
      35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,
      50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,
      65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
      80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,
      95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
      110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
      125, 126, 127, 0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,  11,
      12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,
      27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,
      42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,
      57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,
      72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,
      87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101,
      102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
      117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0,   1,   2,   3,
      4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  15,  16,  17,  18,
      19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,
      34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,
      49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
      64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,
      79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,
      94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108,
      109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
      124, 125, 126, 127, 0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,
      11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,
      26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,
      41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,
      56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,
      71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,
      86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100,
      101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
      116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0,   1,   2,
      3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  15,  16,  17,
      18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,
      33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
      48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,
      63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,
      78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,
      93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107,
      108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
      123, 124, 125, 126, 127, 0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
      10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,
      25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,
      40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,
      55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,
      70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,
      85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,
      100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
      115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0,   1,
      2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  15,  16,
      17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
      32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,
      47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,
      62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,
      77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,
      92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 106,
      107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
      122, 123, 124, 125, 126, 127, 0,   1,   2,   3,   4,   5,   6,   7,   8,
      9,   10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,
      24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,
      39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,
      54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,
      69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,
      84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,
      99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
      114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0,
      1,   2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,  15,
      16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,
      31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,
      46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,
      61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,
      76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
      91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105,
      106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
      121, 122, 123, 124, 125, 126, 127, 0,   1,   2,   3,   4,   5,   6,   7,
      8,   9,   10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,
      23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,
      38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,
      53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,
      68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,
      83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,
      98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
      113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
      0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,
      15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
      30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,
      45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,
      60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,
      75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,
      90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104,
      105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
      120, 121, 122, 123, 124, 125, 126, 127, 0,   1,   2,   3,   4,   5,   6,
      7,   8,   9,   10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,
      22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,
      37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,
      52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,
      67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,
      82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,
      97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
      112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
      127};
  std::list<uint64_t> positions[4096];
  for (size_t i = 0; i < 4096; ++i) {
    positions[i].push_back(fileLoc[i]);
    positions[i].push_back(rleLoc[i]);
  }
  std::unique_ptr<RleDecoder> rle =
      createRleDecoder(std::unique_ptr<SeekableInputStream>(stream), true,
                       RleVersion_1, *dbcommon::getDefaultPool());
  std::vector<int64_t> data(2048);
  rle->next(data.data(), data.size(), nullptr);
  for (size_t i = 0; i < data.size(); ++i) {
    if (i < 1024) {
      EXPECT_EQ(i / 4, data[i]) << "Wrong output at " << i;
    } else {
      EXPECT_EQ(2 * i, data[i]) << "Wrong output at " << i;
    }
  }
  rle->next(data.data(), data.size(), nullptr);
  for (size_t i = 0; i < data.size(); ++i) {
    EXPECT_EQ(junk[i], data[i]) << "Wrong output at " << i;
  }
  size_t i = 4096;
  do {
    --i;
    PositionProvider location(positions[i]);
    rle->seek(location);
    rle->next(data.data(), 1, nullptr);
    if (i < 1024) {
      EXPECT_EQ(i / 4, data[0]) << "Wrong output at " << i;
    } else if (i < 2048) {
      EXPECT_EQ(2 * i, data[0]) << "Wrong output at " << i;
    } else {
      EXPECT_EQ(junk[i - 2048], data[0]) << "Wrong output at " << i;
    }
  } while (i != 0);
}  // NOLINT

TEST(RLEv1, testLeadingNulls) {
  const unsigned char buffer[] = {0xfb, 0x01, 0x02, 0x03, 0x04, 0x05};
  std::unique_ptr<RleDecoder> rle = createRleDecoder(
      std::unique_ptr<SeekableInputStream>(
          new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer))),
      false, RleVersion_1, *dbcommon::getDefaultPool());
  std::vector<int64_t> data(10);
  const char isNull[] = {0x00, 0x00, 0x00, 0x00, 0x00,
                         0x01, 0x01, 0x01, 0x01, 0x01};
  rle->next(data.data(), 10, isNull);

  for (size_t i = 5; i < 10; ++i) {
    EXPECT_EQ(i - 4, data[i]) << "Output wrong at " << i;
  }
}

}  // namespace orc
